├── screenshot.png ├── explainers ├── .DS_Store ├── Omnibox │ ├── omni.PNG │ └── explainer.md ├── 3DView │ ├── dom-tab.jpg │ ├── z-index-tab.jpg │ └── explainer.md ├── FocusMode │ ├── focusmode.png │ ├── toolbar-fade.png │ └── explainer.md ├── CommandPalette │ ├── cp_help.png │ ├── cp_main.png │ ├── cp_command.png │ ├── cp_search.png │ └── explainer.md ├── JSONViewer │ ├── json-viewer.gif │ ├── view-source.png │ ├── colour-coded.png │ ├── current-json-display.png │ └── explainer.md ├── ClientHints │ ├── custom-ua-bug.jpg │ ├── current-ua-devices.jpg │ ├── proposed-ua-devices.jpg │ ├── ua-network-conditions.jpg │ └── explainer.md ├── webhint │ ├── webhint-underline.gif │ ├── webhint-screenshot.png │ └── explainer.md ├── MultiViewport │ ├── DesignDraft1.png │ ├── DesignDraft2.png │ ├── DesignMockup.png │ └── explainer.md ├── StyleTracing │ ├── advanced-paint.png │ ├── selector-stats.png │ ├── current-recalc-style-trace.png │ ├── prototype-recalc-style-trace.png │ └── explainer.md ├── DocumentationSearch │ ├── doc-search.png │ └── explainer.md ├── MediaExplorer │ ├── media-explorer.png │ ├── media-explorer-preview.png │ ├── media-explorer-sidebar.png │ └── explainer.md ├── SearchConsole │ ├── search-console.jpg │ ├── prev-search-error.jpg │ └── explainer.md ├── Sustainability │ ├── explainer_Issues.jpg │ └── explainer.md ├── InBrowserEmulation │ ├── fiirefox-example.png │ └── explainer.md ├── LandmarksVisualisation │ ├── extension-overlay.png │ ├── source-order-viewer.png │ ├── full-accessibility-tree.png │ ├── accessibility-main-element.png │ └── explainer.md ├── README.md ├── explainer-template.md └── SourceHash │ └── explainer.md ├── .github ├── ISSUE_TEMPLATE │ ├── tip.md │ ├── bug.md │ ├── feature.md │ ├── feedback.md │ └── config.yml └── workflows │ ├── ado.yml │ └── score.yml ├── CODE_OF_CONDUCT.md ├── _includes └── youtube.html ├── SUPPORT.md ├── LICENSE ├── README.md ├── SECURITY.md └── .gitignore /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/screenshot.png -------------------------------------------------------------------------------- /explainers/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/.DS_Store -------------------------------------------------------------------------------- /explainers/Omnibox/omni.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/Omnibox/omni.PNG -------------------------------------------------------------------------------- /explainers/3DView/dom-tab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/3DView/dom-tab.jpg -------------------------------------------------------------------------------- /explainers/3DView/z-index-tab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/3DView/z-index-tab.jpg -------------------------------------------------------------------------------- /explainers/FocusMode/focusmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/FocusMode/focusmode.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/tip.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Tips 3 | about: Share tips with other DevTools users! 4 | labels: tip 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /explainers/CommandPalette/cp_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/CommandPalette/cp_help.png -------------------------------------------------------------------------------- /explainers/CommandPalette/cp_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/CommandPalette/cp_main.png -------------------------------------------------------------------------------- /explainers/FocusMode/toolbar-fade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/FocusMode/toolbar-fade.png -------------------------------------------------------------------------------- /explainers/JSONViewer/json-viewer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/JSONViewer/json-viewer.gif -------------------------------------------------------------------------------- /explainers/JSONViewer/view-source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/JSONViewer/view-source.png -------------------------------------------------------------------------------- /explainers/ClientHints/custom-ua-bug.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/ClientHints/custom-ua-bug.jpg -------------------------------------------------------------------------------- /explainers/CommandPalette/cp_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/CommandPalette/cp_command.png -------------------------------------------------------------------------------- /explainers/CommandPalette/cp_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/CommandPalette/cp_search.png -------------------------------------------------------------------------------- /explainers/JSONViewer/colour-coded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/JSONViewer/colour-coded.png -------------------------------------------------------------------------------- /explainers/webhint/webhint-underline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/webhint/webhint-underline.gif -------------------------------------------------------------------------------- /explainers/MultiViewport/DesignDraft1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/MultiViewport/DesignDraft1.png -------------------------------------------------------------------------------- /explainers/MultiViewport/DesignDraft2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/MultiViewport/DesignDraft2.png -------------------------------------------------------------------------------- /explainers/MultiViewport/DesignMockup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/MultiViewport/DesignMockup.png -------------------------------------------------------------------------------- /explainers/StyleTracing/advanced-paint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/StyleTracing/advanced-paint.png -------------------------------------------------------------------------------- /explainers/StyleTracing/selector-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/StyleTracing/selector-stats.png -------------------------------------------------------------------------------- /explainers/webhint/webhint-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/webhint/webhint-screenshot.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug 3 | about: Did you find a bug? Create a report to help us improve. 4 | labels: bug 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for a new feature. 4 | labels: feature 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /explainers/ClientHints/current-ua-devices.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/ClientHints/current-ua-devices.jpg -------------------------------------------------------------------------------- /explainers/DocumentationSearch/doc-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/DocumentationSearch/doc-search.png -------------------------------------------------------------------------------- /explainers/MediaExplorer/media-explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/MediaExplorer/media-explorer.png -------------------------------------------------------------------------------- /explainers/SearchConsole/search-console.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/SearchConsole/search-console.jpg -------------------------------------------------------------------------------- /explainers/ClientHints/proposed-ua-devices.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/ClientHints/proposed-ua-devices.jpg -------------------------------------------------------------------------------- /explainers/JSONViewer/current-json-display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/JSONViewer/current-json-display.png -------------------------------------------------------------------------------- /explainers/SearchConsole/prev-search-error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/SearchConsole/prev-search-error.jpg -------------------------------------------------------------------------------- /explainers/Sustainability/explainer_Issues.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/Sustainability/explainer_Issues.jpg -------------------------------------------------------------------------------- /explainers/ClientHints/ua-network-conditions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/ClientHints/ua-network-conditions.jpg -------------------------------------------------------------------------------- /explainers/InBrowserEmulation/fiirefox-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/InBrowserEmulation/fiirefox-example.png -------------------------------------------------------------------------------- /explainers/MediaExplorer/media-explorer-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/MediaExplorer/media-explorer-preview.png -------------------------------------------------------------------------------- /explainers/MediaExplorer/media-explorer-sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/MediaExplorer/media-explorer-sidebar.png -------------------------------------------------------------------------------- /explainers/LandmarksVisualisation/extension-overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/LandmarksVisualisation/extension-overlay.png -------------------------------------------------------------------------------- /explainers/StyleTracing/current-recalc-style-trace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/StyleTracing/current-recalc-style-trace.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feedback.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: General feedback 3 | about: Send your feedback, start a discussion, or ask a question. 4 | labels: feedback 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /explainers/LandmarksVisualisation/source-order-viewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/LandmarksVisualisation/source-order-viewer.png -------------------------------------------------------------------------------- /explainers/StyleTracing/prototype-recalc-style-trace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/StyleTracing/prototype-recalc-style-trace.png -------------------------------------------------------------------------------- /explainers/LandmarksVisualisation/full-accessibility-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/LandmarksVisualisation/full-accessibility-tree.png -------------------------------------------------------------------------------- /explainers/LandmarksVisualisation/accessibility-main-element.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftEdge/DevTools/HEAD/explainers/LandmarksVisualisation/accessibility-main-element.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Documentation issue 4 | url: https://github.com/MicrosoftDocs/edge-developer/issues 5 | about: Report issues related to the documentation of DevTools here. 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /_includes/youtube.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # Support 2 | 3 | ## How to file issues and get help 4 | 5 | This project uses [GitHub Issues](https://github.com/MicrosoftEdge/DevTools/issues) to track questions, feedback, discussions, feature requests, or bugs. 6 | Please search the existing issues before filing a new one, this will help us avoid duplicates. 7 | 8 | If you have a new question, bug, feature idea, etc. please [create a new issue](https://github.com/MicrosoftEdge/DevTools/issues/new/choose) on the repository. 9 | 10 | ## Microsoft Support Policy 11 | 12 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above. 13 | -------------------------------------------------------------------------------- /.github/workflows/ado.yml: -------------------------------------------------------------------------------- 1 | name: Sync issue to Azure DevOps work item 2 | 3 | on: 4 | issues: 5 | types: 6 | [labeled] 7 | 8 | jobs: 9 | sync: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write 13 | steps: 14 | - uses: MicrosoftEdge/action-issue-to-workitem@main 15 | env: 16 | ado_token: "${{ secrets.ADO_PERSONAL_ACCESS_TOKEN }}" 17 | github_token: "${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}" 18 | with: 19 | label: 'tracked' 20 | ado_organization: 'microsoft' 21 | ado_project: 'Edge' 22 | ado_tags: 'DevToolsGitHubSync' 23 | ado_area_path: 'Edge\Web Experience\Developer Tools' -------------------------------------------------------------------------------- /.github/workflows/score.yml: -------------------------------------------------------------------------------- 1 | name: Score issues in sync'd Azure DevOps work items 2 | 3 | on: 4 | # On issue changes and issue comments, the action will update the 5 | # corresponding issue. 6 | issue_comment: 7 | types: [created, edited, deleted] 8 | issues: 9 | types: [opened, edited, deleted, labeled, unlabeled] 10 | # But we also run once daily to update a bunch of random issues. 11 | # This way we can hopefully pick up issues that got new reactions 12 | # (reactions do not trigger issue changes). 13 | workflow_dispatch: 14 | schedule: 15 | - cron: '0 0 * * *' 16 | 17 | jobs: 18 | metrics: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - uses: champnic/Porpoise@main 22 | env: 23 | GH_PAT: '${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}' 24 | GH_OWNER: 'MicrosoftEdge' 25 | GH_REPO: 'DevTools' 26 | GH_TRACKED_LABELS: 'feature,tracked' 27 | ADO_PAT: '${{ secrets.ADO_PERSONAL_ACCESS_TOKEN }}' 28 | ADO_ORG: 'microsoft' 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Microsoft Edge DevTools 2 | 3 | **Welcome to the Microsoft Edge DevTools feedback repository.** 4 | 5 | This is a place for all users of DevTools to send ideas, feedback, suggestions, bugs, but also ask questions and have discussions about DevTools. 6 | 7 | * 📢 [Open a new issue](https://github.com/MicrosoftEdge/DevTools/issues/new/choose). 8 | * 🔎 [Search for existing issues](https://github.com/MicrosoftEdge/DevTools/issues). 9 | * 📗 [Learn how to use Microsoft Edge DevTools](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/). 10 | * 💾 [Download Microsoft Edge](https://www.microsoft.com/edge). 11 | 12 |

13 | Screenshot of Microsoft Edge DevTools 14 |

15 | 16 | ## Code of conduct 17 | 18 | Note that this project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 19 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 20 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 21 | 22 | ## Trademarks 23 | 24 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft 25 | trademarks or logos is subject to and must follow 26 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general). 27 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. 28 | Any use of third-party trademarks or logos are subject to those third-party's policies. 29 | -------------------------------------------------------------------------------- /explainers/README.md: -------------------------------------------------------------------------------- 1 | # Microsoft Edge DevTools Explainers 2 | 3 | This is the home of the "explainers" and related documents originating from the Microsoft Edge DevTools team. 4 | 5 | Explainers are documents focused on describing a user/ developer/ customer problem (at a high level) and exploring potential solutions to the problem. These documents are starting points for engaging in discussion with you and other members of the community. Explainers should address their stated problems in clear and easy to understand language. Proposed solutions should be easy to follow and not too deep in technical details. When you read an explainer, we hope the stated problem is compelling and you can form an opinion for whether the proposed solution would address the problem. 6 | 7 | Currently, the following explainers are available to read and provide feedback: 8 | 9 | 15 | 16 | ## Providing feedback 17 | 18 | We are looking for feedback! Are the stated problems relevant to you? How have they impacted your experience? Do the proposed solutions seem reasonable? Would they solve a problem you currently have? (We love to hear that; tell us more about your scenario!) Do you have related use-cases we hadn't considered? 19 | 20 | We appreciate you taking the time to offer feedback; it helps to improve the explainers, and validate the problem and solutions they describe. 21 | 22 | **[Start a new issue here](https://github.com/MicrosoftEdge/DevTools/issues/new/choose)**, or [join in the discussion](https://github.com/MicrosoftEdge/DevTools/issues) on existing issues. We also welcome PRs on the explainer documents themselves. -------------------------------------------------------------------------------- /explainers/explainer-template.md: -------------------------------------------------------------------------------- 1 | # DevTools: Feature name here 2 | 3 | Authors: 4 | - *[Author name](link to GitHub user name)*, Microsoft Edge 5 | - *[Author name](link to GitHub user name)*, Microsoft Edge 6 | 7 | ## Status of this feature 8 | *Select one of the statements below that applies and delete the others.* 9 | 10 | This is a proposal for a new feature that is not yet in development. 11 | 12 | This feature is in active development. See [Changelog section](#changelog) for details. 13 | 14 | This feature is available as of Microsoft Edge *version.number.here.* This explainer is no longer active and is provided for reference only. 15 | 16 | This explainer is no longer active and is provided for reference only. 17 | 18 | ## Proposal 19 | *If feature proposal is brief (a paragraph or two), you can put it here and delete sub-sections below. Mockup images are recommended. If feature proposal is longer, you can summarize here but shift explanation to sub-sections* 20 | 21 | ### Introduction *(Optional: Delete section if not needed)* 22 | *For more complex proposals, describe the user problem to be solved or otherwise set the scene.* 23 | 24 | ### Goals *(Optional: Delete section if not needed)* 25 | *Pivot from problem space to solutions by listing goals of a feature.* 26 | 27 | ### Usage *(Optional: Delete section if not needed)* 28 | *Include step-by-step of how user would use the feature with mockups if available. If comparing multiple options, create subsections for each option.* 29 | 30 | ## Feedback 31 | Have feedback? We want to hear it! *[Issue #123](link to issue announcing explainer, which will need to be added after first commit)* tracks community feedback on this explainer. 32 | 33 | ## Changelog *(Optional: Delete section if feature has not shipped)* 34 | 35 | | Edge release | Changelog | 36 | |--------------|---------------------------------------------------------| 37 | | *version.number* | *Description of changes.* | 38 | 39 | *(Optional: you can include YouTube videos by ID with the following syntax)* 40 | 41 | {% include youtube.html id="JLMbpiywVxQ" %} -------------------------------------------------------------------------------- /explainers/JSONViewer/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: In-browser JSON viewer 2 | 3 | Authors: 4 | - *[Chris Heilmann](https://twitter.com/codepo8)*, PM, Microsoft Edge 5 | 6 | ## Status of this feature 7 | 8 | This is a proposal for a new feature that is not yet in development. 9 | 10 | ## Proposal 11 | 12 | Currently when you navigate to a JSON file in Microsoft Edge, you get a basic text display of the document. 13 | 14 | ![JSON displayed as plain text in the browser](current-json-display.png) 15 | 16 | When navigating to an HTML document, and selecting "view source" you get a colour-coded display with line numbers instead. 17 | 18 | ![View source showing HTML in a more detailed fashion than just a text display](view-source.png) 19 | 20 | We propose to replace that basic JSON view with a colour-coded, collapsible and expandable one. 21 | 22 | ![JSON in browser as a colour-coded, collapsible tree](json-viewer.gif) 23 | 24 | We are currently investigating the overall browser performance impact of this, which is why the first implementation is what is shown in the screencast above. 25 | 26 | ### Goals 27 | 28 | As JSON files are data structures and users want to drill down into the data and analyse it in detail. This is a first step in this direction. In subsequent iterations we want to add more functionality like displaying header data and a raw view, saving and copying data and filtering the information. 29 | 30 | ### Usage 31 | 32 | This functionality will trigger automatically when the browser navigates to a JSON file on the web or the user opens a local one. Once we add more features you will also be able to interact with the JSON data in more detail. 33 | 34 | ### Feature release plan 35 | 36 | **Current:** JSON is being displayed as a collapsible tree with line numbers and colour coding in dark and light themes 37 | 38 | Upcoming features in delivery order: 39 | 40 | * Get a "slow" warning when the JSON is too big to render and an option to show it as plain text instead 41 | * Get an "invalid" warning when the JSON payload is invalid 42 | * Switch between the expandable tree view and the raw text view 43 | * Copy the JSON payload with a button 44 | * Download the JSON payload with a button 45 | * Search/filter the JSON 46 | * Expand and collapse all the nodes in the document 47 | * Choose to display JSON in table format for array data that can be sorted/filtered 48 | * Large JSON payloads will load the first 500K and then offer to stream the rest 49 | * Choose to inherit themes from DevTools 50 | * Set Raw or Tree display as a default 51 | * Open JSON in Network Console 52 | 53 | ## Feedback 54 | 55 | Have feedback? We want to hear it! *[Issue #87](https://github.com/MicrosoftEdge/DevTools/issues/87)* tracks community feedback on this explainer. 56 | -------------------------------------------------------------------------------- /explainers/LandmarksVisualisation/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: Landmarks tree view with page overlays 2 | 3 | Authors: 4 | - *[Chris Heilmann](https://github.com/codepo8)*, Microsoft Edge, Program Manager 5 | 6 | Landmarks are an important accessibility feature of any web product as they allow users of assistive technology to navigate them quickly without a lot less noise and interaction. Currently there is no way to see in a visual manner what part of the document constitutes a landmark. 7 | 8 | ## Status of this feature 9 | 10 | This is a proposal for a new feature that is not yet in development. 11 | 12 | ## Proposal 13 | 14 | Currently the only way to verify the existence of landmarks is via manual testing or by checking the [Accessibility tree](https://learn.microsoft.com/microsoft-edge/devtools-guide-chromium/accessibility/accessibility-tab). 15 | 16 | ![Accessibility tree showing a main element](accessibility-main-element.png) 17 | 18 | There is also an experimental, full accessibility tree view in the Elements tool. 19 | 20 | ![Full accessibility tree replacing the DOM tree in the elements tool](full-accessibility-tree.png) 21 | 22 | Both these tools do not offer a visual overlay showing the user what part of the document is the landmark. You also need to know what constitutes a landmark. 23 | 24 | Therefore having a landmark tree with page overlays would be useful for spot checking accessibility. There are already Developer Tools extensions like the [Landmarks browser extension](http://matatk.agrip.org.uk/landmarks/) that offers this functionality. You can see the extension in action [watching this video](https://user-images.githubusercontent.com/13508/168231108-6c39335a-eb19-4e9f-be04-5fb35ea208ff.mp4) or in the following screenshot. 25 | 26 | ![Extension showing the landmarks tree and the highlighted corresponding section in the live site](extension-overlay.png) 27 | 28 | Currently the Accessibility tool already features a [Source Order Viewer](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/accessibility/test-tab-key-source-order-viewer), that applies overlays to the document. 29 | 30 | ![Source order viewer showing the source order as an overlay in the document](source-order-viewer.png) 31 | 32 | This proposal is to offer an own landmarks tree with similar overlays in the Accessibility tool and show overlays in the current document in the Accessibility tree. Furthermore, the full accessibility tree display should highlight landmarks in a more obvious manner. 33 | 34 | ### Goals 35 | 36 | 1. Give web content authors a simple way to verify that their landmarks syntax is correct. 37 | 1. Allow testers to verify the existence of landmarks in a web product in a fast and visual way. 38 | 39 | ## Feedback 40 | Have feedback? We want to hear it! *[Issue #56](https://github.com/MicrosoftEdge/DevTools/issues/56)* tracks community feedback on this explainer. -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://learn.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/msrc/pgp-key-msrc). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/msrc/cvd). 40 | 41 | -------------------------------------------------------------------------------- /explainers/SearchConsole/explainer.md: -------------------------------------------------------------------------------- 1 | # Search the Console for Errors 2 | 3 | Authors: [Erica Draud](https://github.com/erdraud) 4 | 5 | ## Status of this Document 6 | * This document status: **Active** 7 | * **Current version: this document** 8 | 9 | ## Introduction 10 | 11 | One of the most common problems users that are new to the Developer Tools face is understanding Console messages. "Why are there errors and what does /error message/ mean?" We'd like to make it easier for users to answer these questions. We are experimenting on the error message workflow. We will start by adding a function to search for the Console error or warning directly from its banner. Further experimentation will be based on the response from the first experiment. 12 | 13 | ## Goals 14 | 15 | 1. To reduce context switching in Edge DevTools, 16 | 2. To make the Console less intimidating to inexperienced users, and 17 | 3. To learn more about the greatest pain points that our new developers face. 18 | 19 | ## Non-Goals 20 | 21 | * Integrate search experience throughought the Developer Tools 22 | 23 | ## Use Cases 24 | 25 | A new developer is using the DevTools Console, one of the most used tools we have. They see an error message they don’t understand. What’s their first instinct? Look it up. We’re going to make this experience easier and easier for them. 26 | 27 | A new developer clicks on the links in the error or warning message, which links them to tools they find even more confusing. They can instead turn to the familiar information icon for help. 28 | 29 | ## Proposed Solution 30 | 31 | We will add a search icon to the end of the error message, which will open a new tab with their default search browser with results for that error. 32 | 33 | ![Search error information icon](search-console.jpg) 34 | 35 | We will track the amount of usage for this feature. If it's less than 1%, we will try to address whether it's discovery or usability that is the problem. We'll track which error message types are most requested. 36 | 37 | Based on the number of searches and what error messages are most searched for, we will experiment with integrating documentation directly into the Developer Tools. Users will have a way to expand the error message or open a “documentation pane” within the DevTools to learn about the most popularly requested error messages without switching context. 38 | 39 | 40 | ## Alternative Solutions 41 | 42 | We were previously considering adding the search option to the context menu that appears when the user right-clicks an error message. This experience is similar to what a user would experience if they highlighted text in the error message and right-clicked their selection. The existing context menu search experience closely models that of the browser, where you can also highlight text, right-click your selection, and access a search tool. This shows that context menus might not be the expected location for such a feature for new developers. 43 | ![Search from right-click context menu](prev-search-error.jpg) 44 | -------------------------------------------------------------------------------- /explainers/MediaExplorer/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: Media Explorer 2 | 3 | Authors: 4 | - *[Chris Heilmann](https://github.com/codepo8)*, PM, Microsoft Edge 5 | 6 | ## Status of this feature 7 | 8 | This is a proposal for a new feature that is not yet in development. 9 | 10 | ## Proposal 11 | 12 | A common use case of the web is to download images and videos displayed in web products, either to consume offline or to re-use and share. Often this media is hard to get as web products don't make it easy to access it or only show a low quality preview and link to the full version. The media explorer tool would cut to the chase and display all the images and video sources in the current document as an easy to navigate, preview and download interface. 13 | 14 | ### Introduction 15 | 16 | There are numerous browser extensions and software packages that allow you to do grab and download media from web pages. Many come with a subscription and as this is a common demand there is also a fair share of malware in this area. As the media of any web site is already downloaded to the user's browser cache and DevTools can analyse the product's source for links to media this feature would make extensions like these obsolete and offer a safer option for users. 17 | 18 | All the functionality of the media explorer is available using existing tools in DevTools, but it needs developer skills to use them. 19 | 20 | * The Network Tool allows you to access and download media in the current document. 21 | * The Elements and Console tool to analyse the structure of a document and get a list of all the media in the current document and links to more. 22 | 23 | The media explorer tool makes this easier for users not familiar with the Network tool or how web sites are structured. 24 | 25 | ### Goals 26 | 27 | The media explorer helps users to: 28 | 29 | * Find, explore and download media in the current web site 30 | * Get access to the full size media on web sites with preview images 31 | * Consume videos in a native browser interface instead of players with annoying overlays and interstitials 32 | * Users on slower and flaky connections to try to download media instead of getting a buffering or time out experience 33 | 34 | ### Usage 35 | 36 | When opening DevTools on a document, the user can switch to the media explorer to see links to all the videos and images in the current document. 37 | 38 | ![The Media explorer tool inside Devtools](media-explorer.png) 39 | 40 | Clicking any of these will open a preview of the media with information about size and availability. 41 | 42 | ![Previewing an image in the media explorer](media-explorer-preview.png) 43 | 44 | Users can download individual files or select more than one and get a zip file of all of them. 45 | 46 | Alternatively, the Media Explorer could also be used as part of the side bar experience without any need to open developer tools. 47 | 48 | ![The media explorer as an Edge Sidebar experience](media-explorer-sidebar.png) 49 | 50 | ## Feedback 51 | 52 | Have feedback? We want to hear it! *[Issue #107](https://github.com/MicrosoftEdge/DevTools/issues/103)* tracks community feedback on this explainer. 53 | -------------------------------------------------------------------------------- /explainers/3DView/explainer.md: -------------------------------------------------------------------------------- 1 | # Update 3D View 2 | 3 | Authors: [Erica Draud](https://github.com/erdraud) 4 | 5 | ## Status of this Document 6 | * This document status: **Active** 7 | * **Current version: this document** 8 | 9 | ## Introduction 10 | We released [3D View](https://learn.microsoft.com/microsoft-edge/devtools-guide-chromium/3d-view/) as a comprehensive tool for debugging your web application in the 3D space. This document will cover enhancements and adjustments we're making based on feedback. 11 | 12 | ## Goals 13 | * Make the UI in the DOM and Z-index tabs consistent by updating the strings and their organization 14 | * Create a toolbar with the canvas and camera controls integrated 15 | * Adjust canvas controls for more intuitive use 16 | * Persistent settings after snapshot is taken 17 | * Remove the experiment since 3D View has already rolled out 18 | * Remove Layers pane, as it is now Composited Layers pane in 3D View 19 | 20 | ## Use Cases 21 | * A developer using both the DOM and Z-index tabs is confused about the difference between a `Heatmap` color and one without the `Heatmap` identifier. They waste time playing with the colors until they realize there is no difference. 22 | * A developer is debugging their application. They're used to the Layers pane and have started using 3D View, not realizing that they can just stay in the 3D View for the same experience without switching context. 23 | * A developer believes the left side of the mouse should be used for panning. The DOM rotates instead of panning. They do not realize that the functionality they need exists, so they give up and close out of 3D View. 24 | 25 | ## Proposed Solution 26 | 27 | ### 3D View UI 28 | We will be updating the DOM tab's UI to match that of the Z-index tab's for greater consistency. We will flip the `Show all elements` and `Isolate selected element` sections to match the order of the Z-index tab. We will also remove the `Heatmap` identifier for the color types in the DOM tab. 29 | 30 | The icons in the 3D canvas need to be updated to align with the DevTools UI. 3D View is getting even more discovery with the **+** button in DevTools, so it is particularly important that the UI is up to par. We are currently working with the design team to get the assets needed for this. 31 | 32 | A toolbar will be added at the top of the tool, which will be consistent between 3D View's different tabs, so that users can access and understand the functions of the canvas and camera better. The panning and rotate buttons in the toolbar will be highlighted when in use and can be selected directly with panning being the default option. Users will still be able to access these tools with the mouse and keyboard as usual. 33 | 34 | The zoom slider will swap directions, since users currently view it as being fully zoomed in. It will be updated to mimic the zoom sliders of common applications such as maps. The proposed changes are shown below: 35 | 36 | ![Z-index UI changes](z-index-tab.jpg) 37 | 38 | ![DOM UI changes](dom-tab.jpg) 39 | 40 | ### Persistent settings 41 | Users want 3D View pane settings to persist when taking a new snapshot. In the DevTools, taking a new snapshot is a way to refresh the canvas view. The settings currently refresh with the canvas, but users would like them to stay the same, leaving only the DOM to adjust. This would help make the 3D View feel more personalized to the user. 42 | -------------------------------------------------------------------------------- /explainers/InBrowserEmulation/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: In-browser responsive design and emulation tools 2 | 3 | Authors: 4 | - *[Chris Heilmann](https://github.com/codepo8)*, Microsoft Edge, PM 5 | 6 | ## Status of this feature 7 | 8 | This is a proposal for a new feature that is not yet in development. 9 | 10 | ## Proposal 11 | 12 | Responsive design tooling and device emulation should be available in main browser window without the DevTools being open. 13 | 14 | ### Introduction 15 | 16 | The current implementation of [device emulation and responsive design tooling](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/device-mode/) requires DevTools to be open. This means that single screen users will have not much space in the browser to emulate high resolution devices without having to zoom out. 17 | 18 | ![Device emulation with developer tools open](https://learn.microsoft.com/microsoft-edge/devtools-guide-chromium/media/device-mode-toggle-device-toolbar-highlighted.msft.png) 19 | 20 | Multi screen users can dock the developer tools to another screen, but will have a disconnect between using the elements picker and seeing the result on a different screen. 21 | 22 | The original tooling idea was to see an emulated device or resize the viewport and use the tools to debug and edit the product. This assumes that every user of this functionality will be a developer who works on the project. There is, however, a much larger group of designers, testers and power users who would benefit from being able to spot check products in different resolutions and emulated devices without having DevTools open as they are just wasted screen estate for them. 23 | 24 | ### Goals 25 | 26 | Enable all users to 27 | 28 | * see the current web product in different resolutions 29 | * see the product in various emulated devices 30 | * see the product in different media states (dark mode, light mode, high contrast) 31 | * see the product in various emulated vision states (colour deficiency, blurred) 32 | 33 | ### Existing implementations 34 | 35 | The [Microsoft Edge Extension for Visual Studio Code](https://aka.ms/devtools-for-code) currently features [a screencast with an own toolbar](https://docs.microsoft.com/microsoft-edge/visual-studio-code/microsoft-edge-devtools-extension#device-and-state-emulation) that offers similar functionality. 36 | 37 | ![Emulation toolbar in the extension screencast](https://learn.microsoft.com/microsoft-edge/visual-studio-code/microsoft-edge-devtools-extension-images/edge-for-code-screencast-v2.png) 38 | 39 | ![Emulation toolbar offering different devices to emulate](https://learn.microsoft.com/microsoft-edge/visual-studio-code/microsoft-edge-devtools-extension-images/edge-for-code-screencast-v2-emulating.png) 40 | 41 | ![Emulation toolbar offering different states to preview like dark and light mode](https://learn.microsoft.com/microsoft-edge/visual-studio-code/microsoft-edge-devtools-extension-images/edge-for-code-forced-colours.png) 42 | 43 | Firefox also has an emulation bar that is available independent of Developer tools being open. 44 | 45 | ![Firefox showing the mobile emulation toolbar](fiirefox-example.png) 46 | 47 | ## Discussion points 48 | 49 | The main question to answer now is one of discovery. How would users not familiar or interested in Developer Tools be able to find this functionality? 50 | 51 | ## Feedback 52 | Have feedback? We want to hear it! *[Issue #83](https://github.com/MicrosoftEdge/DevTools/issues/83)* tracks community feedback on this explainer. -------------------------------------------------------------------------------- /explainers/webhint/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: webhint integration in Issues 2 | 3 | Authors: 4 | - [Rachel Simone Weil](https://github.com/hxlnt), Program Manager 5 | - [Tony Ross](https://github.com/antross), Senior Software Engineer 6 | - [David Garcia Gomez](https://github.com/sarvaje), Software Engineer 7 | - [John Emau](https://github.com/johnemau), Software Engineer 8 | - Josephine Le, Designer 9 | 10 | ## Status of this feature 11 | This feature is experimental and in active development. See [Changelog section](#changelog) for details on progressive feature implementation starting with Edge 85. 12 | 13 | ## Introduction 14 | The [2019 MDN Web Developer Needs Assessment report](https://mdn-web-dna.s3-us-west-2.amazonaws.com/MDN-Web-DNA-Report-2019.pdf) illuminates a number of pain points that web developers face in their work. The report outlines challenges in implementing and testing cross-browser compatibility, security, performance, and accessibility. Web developers also note the difficulty of keeping up with documentation and the latest best practices. 15 | 16 | There are numerous tools that audit websites for problems in compatibility, security, etc. However, keeping up with these solutions, learning how to use and configure them, and integrating them into a web development workflow can require a great deal of time and effort. Additionally, these tools provide audits or reports that are generally run *after* a site is built—in a CI/CD pipeline, for example—when changes are more challenging or costly to make. 17 | 18 | To address these pain points, the Edge DevTools now offer *proactive* feedback on accessibility, cross-browser compatibility, performance, security, PWAs, and more that can be used in real-time during development and debugging. We achieve this through the inclusion of [webhint](https://webhint.io), a fully open-source best practices engine that uses industry-leading APIs from MDN, Deque University, and more. 19 | 20 | ## Goals 21 | Our goal in including webhint in DevTools is to help developers rapidly address known pain points around accessibility, cross-browser testing, etc. *during* development, rather than after. webhint is both open-source and highly customizable, meaning it reflects the best practices of web developers rather than browser vendors. Specifically, the recommendations that appear in the **Issues** tool in DevTools are: 22 | 23 | - **specific,** down to the line of code or HTTP request in question, 24 | - **trustworthy,** linking to relevant documentation when more context is needed, 25 | - **just in time,** conveniently updated in real-time like a code linter, 26 | - **customizable,** catering the feedback you see to your project's needs, and 27 | - **actionable,** with concrete recommendations on how to fix the issue. 28 | 29 | ![webhint feedback in Issues tool](webhint-screenshot.png) 30 | 31 | ## Usage 32 | 33 | ### View feedback in **Issues** 34 | 35 | **Issues** can be opened in DevTools by selecting the blue dialog box in the top-right corner of DevTools. Alternatively, it can be opened by opening the ... menu and choosing More tools > Issues. 36 | 37 | Feedback is sorted into categories based on the type of feedback. Click a category to expanded or collapse it. Each recommendation includes documentation, affected code snippet (where applicable), a severity label (e.g., Warning, Error, Info), and links to other relevant information in the **Elements,** **Network,** or **Sources** tools. 38 | 39 | 40 | ### Preview issues in **Elements** 41 | 42 | With the Show issues in Elements experiment selected, wavy underlines will appear in the Elements pane to indicate code for which there is a warning or recommendation. These underlines match those you might see in web IDEs such as [VS Code](https://code.visualstudio.com). 43 | 44 | ![webhint feedback accessed from Elements](webhint-underline.gif) 45 | 46 | To see the issue details, Shift + click on the underlined item. Or, use the context menu and select View issues. 47 | 48 | ### Roadmap for new features 49 | 50 | Additional features we are considering for upcoming releases include 51 | 52 | - more sort and filter capabilities, and 53 | - localization of feedback to match the language of your DevTools 54 | 55 | The team welcomes your feedback on this feature; please [file an issue](https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=DevTools&template=devtools.md&title=%5BDevTools%5D+%3CTITLE+HERE%3E) to share your thoughts. 56 | 57 | ## Changelog 58 | 59 | | Edge release | Changelog | 60 | |--------------|---------------------------------------------------------| 61 | | 85 | Initial integration of webhint feedback into Issues as an experimental feature. | 62 | | 88 | Added code snippets, documentation links, and links to other tools in DevTools. | 63 | | 91 | Added severity icons and underlines in Elements. | 64 | -------------------------------------------------------------------------------- /explainers/StyleTracing/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: Selector Performance Tracing for Style Calculations 2 | 3 | Authors: 4 | 5 | * *[Brandon Walderman](https://github.com/bwalderman)*, Senior Software Engineer, Microsoft Edge. 6 | 7 | ## Feedback 8 | 9 | Have feedback about this explainer? We want to hear it! 10 | 11 | **[Issue #98](https://github.com/MicrosoftEdge/DevTools/issues/98)** tracks community feedback on this explainer. 12 | 13 | ## Status of this feature 14 | 15 | This is a proposal for a new feature that is not yet in development. 16 | 17 | ## Introduction 18 | 19 | Style recalculation (or style recalc) is the process of iterating through DOM elements on a page, finding all of the CSS style rules that match a given element and then computing the element's actual style based on these rules. 20 | Style recalc needs to happen whenever the applicability of CSS rules may have changed. Some examples include: 21 | 22 | * Elements were inserted or removed from the DOM 23 | * An element's attributes (e.g. class, id) were changed 24 | * User input such as mouse move or focus change, which can affect `:hover` rules 25 | 26 | Style recalc can be an expensive operation and long-running recalc operations can become performance bottlenecks that web developers need to debug. 27 | 28 | The DevTools performance panel records a "Recalculate Style" trace event that shows when style recalculation occurs. 29 | 30 | ![A DevTools performance trace with a Recalculate Style event](current-recalc-style-trace.png) 31 | 32 | The event currently shows the elapsed time and total number of elements affected, but no information about which elements these are, or which style rules were involved. 33 | Although the JavaScript location that triggered the style recalc is sometimes included in the trace event, it may not always be obvious how the initiator is related to the affected elements, especially when there are a large number of them. 34 | Overall, this can make it difficult for web developers to understand how to fix long-running style recalc tasks with the information at hand. 35 | 36 | We'd like to offer web developers greater visibility into how time is being spent during style recalc to make it easier to root cause and mitigate performance issues due to recalc. 37 | 38 | ## Existing Solutions 39 | 40 | Developers can already see extra statistics from style recalc in the `edge://tracing` UI if the `"blink.debug"` tracing tag is enabled. 41 | The statistics show up as a `SelectorStats` trace event which includes a table of style rules with the following columns: 42 | 43 | * Elapsed CPU time spent evaluating the style rule (lower is better). 44 | * Number of "fast reject" elements that were cheap/efficient to eliminate from matching (higher portion of attempts is better). 45 | * Number of elements the Blink rendering engine attempted to match with the rule. 46 | * Number of elements that were actually matched. 47 | * CSS selector text. 48 | 49 | ![SelectorStats event viewed through edge://tracing](selector-stats.png) 50 | 51 | This information can be valuable to web developers, but the `edge://tracing` UI can be daunting, especially for beginners, and the `"blink.debug"` tag needs to be enabled first. 52 | 53 | ## Proposed Solution 54 | 55 | The proposed solution is to display these same statistics in the details view for "Recalculate Style" events in DevTools performance traces, where it will be more visible to web developers who are already familiar with the DevTools Performance tool. 56 | 57 | Developers will be able to sort the table by any column, so that they can identify individual rules that take a longer time to process or have a high number of match attempts. 58 | If available, the CSS selector text will be enhanced with a link to the source location where the CSS rule is declared. This will let web developers quickly jump to the rule they are interested in so they can continue their investigation. 59 | 60 | Below is a mockup of the proposed design, with the new content highlighted in red. Note that links to source locations are not currently shown in this mockup but would be rendered similar to other source links found in DevTools. 61 | 62 | ![A DevTools mockup of the Recalculate Styles trace event details view with new selector statistics included](prototype-recalc-style-trace.png) 63 | 64 | ## Usage 65 | 66 | Selector statistics in DevTools performance traces will be disabled by default because the underlying `SelectorStats` trace event is expensive to record and can have a noticeable impact on page perf. 67 | While enabling this feature would impact raw timings captured throughout the trace, the timings would still be proportional to each other and can still yield useful information to developers. 68 | Developers will need to explicitly enable the feature through a checkbox in the performance panel settings. 69 | 70 | The DevTools performance panel already has a similar optional feature named "advanced paint instrumentation". 71 | The checkbox to enable the feature includes a warning about the performance overhead, both in the label and in the tooltip. 72 | The settings icon color is also changed to red to remind the user, even while the settings are hidden. 73 | 74 | ![DevTools performance panel settings with advanced paint instrumentation enabled](advanced-paint.png) 75 | 76 | Instead of adding another checkbox to the settings view, we should consider merging the selector statistics and advanced paint instrumentation into a single checkbox named "enable advanced rendering instrumentation (slow)". 77 | This avoids the need for another checkbox in the settings view and allows us to re-use the existing UI for warning about the performance impact. 78 | 79 | When the checkbox is enabled, a table of selector statistics will be available in the details view for any "Recalculate Styles" events. 80 | 81 | ## Future Work 82 | 83 | We should provide web developers with resources to understand how to use this new tool effectively. Some patterns in the data worth exploring: 84 | 85 | * Expensive unused selectors. 86 | * Expensive broadly scoped selectors. 87 | * Underutilized selectors (low match count / match attempts). 88 | 89 | ## References 90 | 91 | * Blog post: [Reduce the scope and complexity of style calculations](https://web.dev/reduce-the-scope-and-complexity-of-style-calculations) 92 | * Chromium commit: [Collect statistics on selector matching during style recalc](https://chromium-review.googlesource.com/c/chromium/src/+/3582806) 93 | -------------------------------------------------------------------------------- /explainers/FocusMode/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: Focus Mode UI 2 | 3 | Authors: 4 | - [Rachel Simone Weil](https://github.com/hxlnt), Program Manager 5 | - [Jose Leal Chapa](https://github.com/joselea), Senior Software Engineer 6 | - [Patrick Brosset](https://github.com/captainbrosset), Senior Software Engineer 7 | - [Chait Pinnamaneni](https://github.com/noobtiger), Software Engineer 8 | - Ebou Jobe, Software Engineer 9 | - Josephine Le, Designer 10 | 11 | ## Status of this feature 12 | This feature is experimental and in active development. See [Changelog section](#changelog) for details on progressive feature implementation starting with Edge 90.0.810.0. 13 | 14 | The team welcomes your feedback on this feature; please [file an issue](https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=DevTools&template=devtools.md&title=%5BDevTools%5D+%3CTITLE+HERE%3E) to share your thoughts. 15 | 16 | ## Introduction 17 | Over the years, the Chromium DevTools have grown to include a large array of specialized tools—about 30 at time of writing—to help web developers troubleshoot web applications. Some, like **Elements** and **Console**, may be used daily, while others, like **Sensors** and **Performance monitor,** may have more specialized but infrequent use. 18 | 19 | DevTools users tell us that a side effect of having numerous tools is that the overall experience can be visually and conceptually overwhelming. New web developers may not have a clear idea of where to start and how to explore and use the DevTools. More experienced developers may find themselves in one or two familiar workflows that want to focus in on. 20 | 21 | To address these diverse needs, we're experimenting with new features that make it easier to learn and use the Edge DevTools, such as 22 | - A redesign of **What's New** (now called **Welcome**) that highlights documentation, resources, and new features in a user-friendly format, 23 | - New ways to customize tab layout, and 24 | - A tooltip help feature to help you learn what different parts of DevTools do. 25 | 26 | This document describes a fourth new feature to address the complexity of DevTools: Focus Mode. Focus Mode is an alternative, minimal UI option that lives alongside the "classic" Chromium DevTools UI. This interface will offer all the same functionality but with a cleaner, customizable interface, helping you put in focus your most important debugging tasks without extra clutter or distractions. 27 | 28 | ![Focus Mode UI](focusmode.png) 29 | 30 | ## Goals 31 | 1. To lower the learning curve for new users of Edge DevTools, 32 | 2. To reduce the complexity of the Edge DevTools without compromising its feature set, and 33 | 3. To allow users to use predefined or custom layouts suited to certain debugging tasks and personal preference. 34 | 35 | Those of us creating this new interface acknowledge the responsibility that comes with changes of this magnitude. For this reason, we're limiting these new features to early adopters who wish to opt-in to trying them. The new UI can be turned on and off, so no commitment is required. 36 | 37 | We're also approaching the development of these features iteratively, gaining feedback, tweaking features, and learning as we go. (After all, our team is made up of web developers, too!) We expect the first few releases to be a little rough around the edges, but we think it's valuable to work out in the open to ensure these changes are ones that Edge DevTools users will love. Your feedback (via an [issue on this repo](https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/new?labels=DevTools&template=devtools.md&title=%5BDevTools%5D+%3CTITLE+HERE%3E) or on [Twitter](https://twitter.com/EdgeDevTools)) is valued, especially in these early stages. 38 | 39 | ## Usage 40 | 41 | ### Switch to Focus Mode 42 | To try Focus Mode in Microsoft Edge 90.0.810.0 and later, open the Settings pane, then choose the Experiments section on the left side. Select the checkboxes next to "Focus Mode and DevTools Tooltips" and "Enable + button tab menus to open more tools," then restart DevTools. The Focus Mode experiment also enables DevTools Tooltips. 43 | 44 | To return to the default DevTools UI, repeat the process above, unchecking the checkboxes. 45 | 46 | Note that the "Enable + button tab menus to open more tools" experiment is an independent feature; however, we recommend turning this feature on when using Focus Mode for the best experience. 47 | 48 | ### Use DevTools in Focus Mode 49 | 50 | With this experiment selected, an activity bar will appear along the left side of DevTools. In top-to-bottom order, the menu contains shortcuts to the following: 51 | 52 | | | Menu shortcuts | 53 | |--------------|---------------------------------------------------------| 54 | | ![Toolbar](toolbar-fade.png) | 55 | 56 | When in Focus Mode, you still have access to all the tools that are available in the default UI. The tool groups (**Home**, **Layout**, **Testing**, **Network**, and **Optimization**) organize the tools based on common web development scenarios. 57 | 58 | ### Customize tool groups in Focus Mode 59 | 60 | Each tool group is customizable: Remove unwanted tools by selecting the X in the top corner of the tab, and add new tools by selecting the More Tools button (+). 61 | 62 | In an upcoming release, you will be able to further customize tool groups by removing default groups and adding your own. 63 | 64 | 65 | ## Changelog 66 | 67 | | Edge release | Changelog | 68 | |--------------|---------------------------------------------------------| 69 | | 90.0.810.0 | Initial release of Focus Mode as experimental feature. | 70 | -------------------------------------------------------------------------------- /explainers/SourceHash/explainer.md: -------------------------------------------------------------------------------- 1 | # Source Hashes in Stack Traces 2 | 3 | Authors: [Rob Paveza](https://github.com/robpaveza) 4 | 5 | ## Status of this Document 6 | This document is a proposed enhancement to V8 in the area of JavaScript stack traces, which is today specifically not a Web Standard. 7 | 8 | * This document status: **Active** (One-pager) 9 | * Expected venue: [V8-dev](https://groups.google.com/g/v8-dev) 10 | * **Current version: this document** 11 | * Prototype [implementation](https://chromium-review.googlesource.com/c/v8/v8/+/3229957) in V8 12 | 13 | ## Introduction 14 | 15 | * Source URLs are often insufficient for uniquely identifying a file in post-hoc debugging scenarios, even when they contain a `# sourceMappingURL=` comment. 16 | * This presents a problem for debugging in production, especially when CI systems might automatically deploy new versions of a source file into a production environment. DevTools might incorrectly load a source map, and there is no way to verify that a source map corresponds to a particular version of a file 17 | * Web developers have come up with many clever ways to handle this - explicitly correlating versions of applications to source maps, or including a CRC as part of a file name - indicating that this is a difficult problem for them. 18 | 19 | ## Goals 20 | 21 | - Improve ability to resolve a source map from only the source file 22 | 23 | ## Non-Goals 24 | 25 | - Change the [Source Maps specification](https://sourcemaps.info/spec.html) 26 | 27 | ## Use Cases 28 | 29 | - Diagnostics in production 30 | 31 | ## Proposed Solution 32 | 33 | The hash of source scripts should be accessible when preparing a stack trace or in other locations in which a source file is referenced. This will include, but is not limited to: 34 | 35 | - `CallSite`, exposed in the callback `Error.prepareStackTrace` 36 | - Some CDP properties: 37 | - `Runtime.CallFrame` 38 | - `Debugger.CallFrame` 39 | - Performance trace embedders for function calls 40 | 41 | By leveraging the hash of the source file, a "fingerprint" can be generated which will allow developers to index their source maps according to the hash of the content actually running in the browser. 42 | 43 | One drawback of this solution is that non-code changes in source files (such as comments or whitespace) are likely to generate files with identical "result sources." For the most part, however, this should be a solvable problem. 44 | 45 | ### Appearance within `CallSite` 46 | 47 | The hash will be a [SHA-256](https://en.wikipedia.org/wiki/SHA-2) and encoded in base-16. The following code snippet would append a source hash to the end of each error stack frame: 48 | 49 | ```ts 50 | (() => { 51 | let canGetScriptHash = false; 52 | const oldPrepareStackTrace = Error.prepareStackTrace; 53 | Error.prepareStackTrace = (er, frames) => { 54 | if ('getScriptHash' in frames[0].constructor.prototype) { 55 | canGetScriptHash = true; 56 | } 57 | return er.stack; 58 | }; 59 | const error = new Error(); 60 | // This should invoke prepareStackTrace above. 61 | const stack = error.stack; 62 | console.log(`Was able to retrieve hash: ${canGetScriptHash}`); 63 | if (!canGetScriptHash) { 64 | Error.prepareStackTrace = oldPrepareStackTrace; 65 | } 66 | else { 67 | Error.prepareStackTrace = (er, frames) => { 68 | const originalStack = er.stack; 69 | const lines = originalStack.split('\n'); 70 | let msg = er.name; 71 | if (er.message) { 72 | msg = `${er.name}: ${er.message}`; 73 | } 74 | const stackLines = lines.slice(1); 75 | const formattedLines = stackLines.map((f, i) => { 76 | const frame = frames[i]; 77 | const hash = frame.getScriptHash(); 78 | if (hash) { 79 | return `${f} [source hash ${hash}]`; 80 | } 81 | return f; 82 | }); 83 | formattedLines.unshift(msg); 84 | return formattedLines.join('\n'); 85 | }; 86 | } 87 | })(); 88 | ``` 89 | 90 | This will produce a stack trace along the following lines: 91 | 92 | ``` 93 | Error: This is an example error. 94 | at http://localhost:8080/test.js:6:11 [source hash ca119760926fbc8502b445d33dc94c4c34d4ef0f20103909e92f91b17c97f33d] 95 | at doWork (http://localhost:8080/additional-script.js:2:3) [source hash d91c151b875409add9cd0e19b20230e09610142727b11aa3873c54f0ae8de414] 96 | at scenario (http://localhost:8080/test.js:4:3) [source hash ca119760926fbc8502b445d33dc94c4c34d4ef0f20103909e92f91b17c97f33d] 97 | at HTMLButtonElement.btn.onclick (http://localhost:8080/main.js:44:5) [source hash 0a5df129f563bdd835347968a0eca78dbd8bb4b2fc7bc95a1ee243e0f5a3d7ac] 98 | ``` 99 | 100 | This is computed entirely in userland, except for the source hash. 101 | 102 | ## Privacy and Security Considerations 103 | 104 | To avoid the possibility that a script might perform some malicious computation based on incoming third-party script hashes, scripts will determine whether they have been loaded as "opaque." "Opaque" is a term of art within V8 that means that details of errors within a script should not be computed due to risks of leaking privacy details. This information is determined by the embedder policy when the `ScriptOrigin` objects are created as part of compiling a script; if the script is loaded as "opaque," then the computation of the hash will opportunistically exit and return an empty string. 105 | 106 | For the browser, the result of this will be that classic scripts loaded with CORS can be computed, those loaded without CORS will not be able to be computed, and module scripts, which are always subject to CORS, will always be able to be computed. 107 | 108 | ## Alternative Solutions 109 | 110 | The original alternative explored here was to enable a property on the `Error` object, `stackTraceSourceHash`, to embed the hash directly in the line. This proposal was rejected because the `Error#stack` property is already not standardized, and adding another flag here would create an additional burden to standardize. 111 | 112 | Another alternative solution explored here was to enable a callback on the `Error` object, such as: 113 | 114 | ```ts 115 | Error.stackTraceComputeFingerprint = (sourceContents: Uint8Array) => Promise; 116 | ``` 117 | 118 | Then, if at runtime the `stackTraceComputeFingerprint` function is not present, it can return to the present behavior. 119 | 120 | While this seems like a reasonable approach, it seems to be an excessive level of complexity that it's unlikely most customers would override; and, I am concerned that it might introduce cross-origin security issues. 121 | -------------------------------------------------------------------------------- /explainers/DocumentationSearch/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: Documentation Search 2 | Authors: 3 | - [Erica Draud](https://github.com/erdraud), Program Manager 4 | - [Sean Larkin](https://github.com/TheLarkInn), Technical Program Manager 5 | 6 | ## Status of this feature 7 | This feature is a proposed experiment. 8 | 9 | ![Documentation Search UI](doc-search.png) 10 | 11 | ## Background 12 | This project was part of the Project Mallard effort to improve Bing searches for developers. Search and solution finding occupy most of a developer’s time on the web. On average, a developer may click 5-10 times until they have found the solution they are looking for. Developers use a variety of services and software that provide contextual hints as to what solutions they might look for, or what work they are assigned to on any given day. These services may include (but are not limited to) ADO, Jira, GitHub, or any other project management software that has their day-to-day work tracked. In combination with the Microsoft Developer Graph, information about the developer can be used to inform and suggest more intelligent and relevant searches. 13 | 14 | For example, a developer has 3 high priority work items on his current ADO sprint all referencing JavaScript animations. They also might have 2 websites bookmarked in Microsoft Edge on JavaScript animations. Prior to ever searching for a solution, Developer Search, leverages the intelligence from the Microsoft Developer Graph, and uses NTP real estate to highlight popular LinkedIn Learning courses on JavaScript and CSS Animations, previous pull requests merged in that project’s codebase, the developer’s bookmarked pages, and finally relevant and popular articles related to the topic. The results are then enriched by the developer’s own search query and are combined to provide a solution in half the time and clicks. 15 | 16 | Open Source developer Tobias Koppers commented on his challenge to find solutions across GitHub: 17 | 18 | > The webpack project consists of over 100 repositories across 2 GitHub projects. If I have to track down a particular issue, I would have to search for it across either all of GitHub or every one of the individual projects and repositories. It would save me hours a week to simply configure my Edge/Bing search to include search results across specific GitHub repositories/projects and return results from PR & Issues. 19 | 20 | ## Goals 21 | 1. Detect when a Microsoft Edge user is a Developer and 22 | 2. Collect all relevant solution areas based on criteria of assigned work items and tasks and 23 | 3. Leverage Bing’s search platform and Microsoft's documentation to create developer focused customer models and insights. 24 | 25 | ## Non-goals 26 | 1. Build a separate search, AI, ML model from Bing today 27 | 28 | ## Hypotheses 29 | * Users will find this valuable in that it will save them time by making it easier to access the developer resources they’re looking for; we'll know it's true if 20% of users are 1-month active users (returning users). 30 | * Users will research Elements and Console more than the other documentation combined; we'll know it's true if the number of documentation searches for Elements and Console are more than 100% of the other documentation searches. 31 | * Users will have trouble finding this feature without a tooltip/pop-up; we'll know it's true with overall usage (if people turn it on). 32 | 33 | This initial experiment will run as a flagged rollout especially since the UI may also affect users outside of DevTools. We will test all three hypotheses and focus on iterating for validating the feature’s value as well as which commands are most valuable. 34 | 35 | ## Solutions 36 | 37 | ### Solution 1: Omnibox Integration 38 | Our ideal option is to have the Documentation Search integrated into the address bar (called the omnibox from now on). We would use a unique character typed into the omnibox to trigger the feature. In the Omnibox experiment, there are other character like `?` and `#` that users can type before typing their command or selecting the command from the drop-down menu. We would find a character to access a similar experience to find the right documentation for the search. We could have a series of keywords that the user can type to access the appropriate documents. 39 | 40 | We would start by integrating into the Commander as an experiment like that of the original Omnibox experiment before the more technical and time-consuming work of integrating into the existing omnibox. 41 | 42 | ### Solution 2: Improved Bing searches 43 | Alternatively, we could detect developers and set up Bing filters that will provide the user with results from only the most relevant websites. 44 | 45 | As developers, we often go back to searching for the same solution 5-6 times before we have it memorized. Even after visiting the same solution page 5-6 times, we may never bookmark, favorite, or document the location of that solution. Microsoft Developer Search can create dictionaries of repeated “searched and found” solutions to quickly recall them in one step. 46 | Examples of this could be simple searches like: 47 | * slice() vs splice() 48 | * call() vs apply() vs bind() 49 | * getTimeout() vs getInterval() 50 | * lodash.map 51 | 52 | Searches like this could yield predictive answers to the exact page a developer “bounced” from (indicating their solution was found) the first 3-4 times. To save developers precious context switching and time, this “bounced” search could even be leveraged across other Microsoft developer products such as VS Code, VS, and VS Online to find answers right in the IDE and code editor. Or in short, the more a developer searches and finds solutions, the less time they will spend in the future needing to find those same solutions. 53 | 54 | ### Solution 3: DevTools Welcome tool integration 55 | We previously did a research study where users said that they would like a search bar for the Welcome tool, especially if it could help them find the documentation they need. In proposing this solution, it could be done in addition to Solution 1 or 2 or on its own. 56 | 57 | This search bar could have the UI pulled from the search bar on docs.microsoft.com, shown in the mockup under [Solutions](#solutions). Upon selecting the search result, it could open the documentation either within DevTools or in a new tab. 58 | 59 | ## Next steps 60 | * Design review 61 | * Flagged rollout 62 | 63 | ## Things to consider 64 | * Discoverability could be an issue 65 | * Searches shouldn't conflict with traditional search engine searches 66 | * Accessibility and privacy compliance needs work 67 | * Need to remove Chrome's petal suggestions for technical, localization, and business reasons 68 | * Commands are relatively easy to add, so we can always add more in the future 69 | -------------------------------------------------------------------------------- /explainers/ClientHints/explainer.md: -------------------------------------------------------------------------------- 1 | # Edit Client Hint headers 2 | 3 | Authors: [Erica Draud](https://github.com/erdraud) 4 | 5 | ## Status of this Document 6 | * This document status: **Active** 7 | * **Current version: this document** 8 | 9 | ## Introduction 10 | 11 | [Client Hints](https://wicg.github.io/client-hints-infrastructure/) focus on securely enabling scalable content negotiation between the client and server through a collection of HTTP and user-agent features with a third-party delegation system. A new expansion to the Client Hints API, [User-Agent Client Hints](https://wicg.github.io/ua-client-hints/) enable developers to access information about a user's browser in a privacy-preserving and ergonomic way. The existing debugging experience for these client hints has been described as limited and “super painful” by our internal clients. Developers cannot easily modify UA Client Hints through an accessible UI, and currently the platform does not support testing custom UA Client Hints and [UA Strings](https://developer.mozilla.org/docs/Web/HTTP/Headers/User-Agent) simultaneously, an important use case for developers. This is a high priority for the Web Platform team; they want to encourage people to switch to using Client Hints over Strings as we hypothesize it will greatly improve site compatibility and code hygiene. They’ve gotten feedback that limited testing infrastructure is a large friction point in that migration, so we are taking on this work to support developers and to improve our existing UX. 12 | 13 | While there are many feature requests regarding UA Client Hints, the Web Platform and our team have worked together to focus on the higher impact items: 14 | 15 | - Address a high-impact bug: UA Client Hint headers are disappearing when custom UA strings are sent 16 | 17 | - Create a more intuitive experience for customizing Client Hints 18 | 19 | - Provide autofill for Client Hints headers to match UA string info and vice-versa 20 | 21 | ## Goals 22 | 23 | 1. To make it easier for users to ensure CH headers are still getting sent even if custom UA is used, 24 | 25 | 2. To limit the effort required in testing Client Hints, and 26 | 27 | 3. To support web developers and browser detection framework teams 28 | 29 | We are taking on the top pain points for developers working with UA Client Hints. Their workflows bleed into the Developer Tools, so we must do our part to support them. As the Client Hints move through Chromium, we will have more and more users that will require these tools, so it’s important that we start sooner rather than later. Once we accomplish these top requests, we can address other pain points as they come up. 30 | 31 | ## Use Cases 32 | 33 | ### Verify success of sent Client Hints headers 34 | 35 | The most desired feature for debugging Client Hints is ensuring CH headers are still getting sent even if custom UA is used. UA Client Hints were recently enabled in Chromium, which has resulted in some compatibility issues and some bugs. One inconsistency that directly impacts the UA Client Hint edit and send story is the Network Conditions UX. 36 | 37 | ![Network conditions UA experience](ua-network-conditions.jpg) 38 | 39 | In Network conditions > User agent, if you select a custom or pre-canned user agent, the UA Client Hints are no longer available; the headers are not sent, `navigator.userAgentData` is still present in the DOM but the brands property is of 0 size: 40 | 41 | ![Custom UA bug](custom-ua-bug.jpg) 42 | 43 | 44 | The expected behavior is that `sec-ua-ch headers` continue to get sent and that `navigator.userAgentData.brands` is not empty. The user also shared that “if the precanned values of “Chrome – Windows” also updated the Client Hints values to match that would substantially address [their] testing concerns.” This improvement could also benefit the associated XBOX UA experience. 45 | 46 | ### Customize UA Client Hints set-up 47 | 48 | 49 | In the DevTools Settings > Devices, there is a feature where users can add custom devices, which enables users to send user agent client hints. The current experience forces users to define every single value in the “User agent client hints” section to send any at all. 50 | 51 | ![Current user agent client hints experience](current-ua-devices.jpg) 52 | 53 | Users want the option to choose which hints to customize such that the remaining fields will just be the value that would have been sent. 54 | 55 | ## Proposed Solution 56 | 57 | ### Emulated Devices 58 | 59 | We will be re-working the User agent client hints UI to be cleaner and easier to use. The form will use grouping for both accessibility and clarity. and we'll use drop-downs to lessen the users burden. Users also won't have to submit every element and will have the guidance of default suggestions. These default will replace the gray text within the form elements shown below. 60 | 61 | ![Proposed user agent client hints experience](proposed-ua-devices.jpg) 62 | 63 | While the design does include changes in other parts of the Devices pane, that is out of scope. We will prioritize accessibility issues there and then investigate if other UI changes should be made there. 64 | 65 | ### Network conditions 66 | 67 | While investigating the [header bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1174299), we also noticed that the UI was lacking. To enter a custom user agent, the developer must type it in a specific string format. To help users navigate this form, we will add the proposed UI for the Devices pane into the Network conditions tool, too. 68 | 69 | ## Q&A 70 | 71 | **Q: Will we need to make changes to the CDP (Chrome Dev Protocol)?** 72 | 73 | A: No 74 | 75 | **Q: Are the client hints displayed in the Emulated Devices pane the only hints available or are there other options that aren’t displayed?** 76 | 77 | A: The list in the device emulation view is the complete set of UA Client Hints 78 | 79 | **Q: Are all the hint inputs currently required because HTTP needs to be sent with all of the header items?** 80 | 81 | A: No, it's fine if some of the headers are undefined. 82 | 83 | **Q: For emulated devices (not the current device), where would auto-fill pull from?** 84 | 85 | A: For *emulated devices that are built-in*, ideally there would be an auto-mapping of characteristics. For example, an Android phone would use the same UA brands list as on desktop, but it would need a hardcoded value for model info (e.g. the UA string baked into DevTools might have been “Nexus 5 Build/MRA58N” but would now need to report a similar string in the Sec-CH-UA-Model hint). For iPhone emulation, it would ideally drop all of the hints by default since UA Client Hints aren’t available for iPhone at all. 86 | 87 | For a *custom device* (or an edited one…), ideally an empty string for one of the UA Clients Hints fields would map to “send whatever the browser would have done otherwise”. 88 | 89 | **Q: Do we need to add default client hints to the existing emulation library for this or for future use cases?** 90 | 91 | A: Yes, I think the emulation library should be upgraded to actually understand Client Hints. 92 | -------------------------------------------------------------------------------- /explainers/MultiViewport/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools: Multiple viewports in Device Mode 2 | 3 | ## Authors 4 | 5 | - [Evelyn Chou](https://github.com/evelynchou02), Explorer Intern 6 | - [Hana Memon](https://github.com/hanamemon), Explorer Intern 7 | - [Jenna Sasson](https://github.com/jenna-sasson), Explorer Intern 8 | - Ryan Hayen, Designer 9 | 10 | ## Status of this feature 11 | 12 | This feature is experimental and in active development. See [Changelog section](#changelog) for details on progressive feature implementation. 13 | 14 | ## Introduction 15 | 16 | ### Current Device Mode 17 | 18 | The history of the Device Mode feature in DevTools predates the current, diverse device ecosystem and mobile emulation has only grown in scope and complexity. Device Mode is a popular tool that web developers use to test the responsiveness of their web contents. Currently, Device Mode allows you to view the webpage through the dimensions of a single device. In this explainer, we propose that handling one device is not enough. There is currently no solution to seeing multiple viewports simultaneously in the DevTools. The only solution is to use browser extensions/external tools. 19 | 20 | ### User Jobs-To-Be-Done (JTBD) 21 | 22 | - Find visual errors on a website in multiple layouts and sizes. 23 | - Test for functionality of the buttons and scrolling on the website. 24 | - Ensure the visual and functional aspects of the website are correct on different devices. 25 | - Compile a list of necessary bugs and changes to be fixed. 26 | 27 | ### Solution 28 | 29 | - Allow users working in Device Mode to be able to add multiple viewports for different devices at one time. Using the WebContents class, users will be able to add extra devices using Headless Mode. Users will be able to see multiple sizes (and different devices that use different operating systems, e.g., iPhone 11 & Galaxy Tab A7) side by side in DevTools. By adding multiple viewports, users can use Device Mode in a more streamlined way without negatively affecting the current experience. 30 | - Users will be more easily able to complete their JTBD if they can see multiple devices at once. They will make comparisons of the functionality and visual aspects of websites in multiple sizes more quickly, increasing overall productivity. 31 | 32 | ## Prior Art 33 | 34 | Already existing tools on the market include: 35 | 36 | - [Polypane](https://polypane.app/) 37 | - [Sizzy](http://sizzy.co/) 38 | - [Responsively](https://responsively.app/) 39 | - [Blisk](https://blisk.io/) 40 | 41 | Each of these applications allow users to add multiple (more than 2) devices through their external application/extension. All these applications allow for synchronization when scrolling and have a multitude of device options (which did not account for newer devices). 42 | 43 | ## Hypotheses 44 | 45 | - We believe that using DeviceMode with multiple viewports will increase efficiency in DevTools customers. Additionally, it will increase user engagement either in session length or number of sessions. Web Developers can be more efficient using DeviceMode if they can view their web pages in multiple screen sizes, dimensions, and device forms side-by-side in DevTools while they make changes as this avoids having to manually resize the viewport. 46 | - The current single viewport device mode has valuable screen real estate that is being underutilized and we think that we can bring in new functionality by adding multiple viewports without negatively changing the experience and functionality today. As of right now, multiple viewports are available but only when using extensions or multiple tools. Adding multiple viewports directly into DevTools will streamline the user experience. 47 | 48 | ### Trigger Conditions and Treatment 49 | 50 | - Opening Device Mode. 51 | - Showing the option within the dropdown menu to add a new viewport. 52 | 53 | ### Metrics 54 | 55 | - Through this experiment, session times will be analyzed. 56 | - Additionally, (for the treatment group) this experiment will provide further insight into how many screens are needed by users to be productive. This can be tracked by checking how many screens are activated in each working session. 57 | 58 | ## Usage 59 | 60 | ### Add a new viewport 61 | 62 | Users will be able to add a new device to the viewport by simply checking a box from the dropdown list of devices in the viewport toolbar. Once a device is added, it will appear either next to or underneath the existing viewport(s) with a toolbar on top of it. The devices will be re-centered to accommodate the new viewport. As more devices are added and the viewport fills up, the user will be able to vertically scroll down the viewport to look at all the devices. 63 | 64 | ### Open DevTools against a new viewport 65 | 66 | DevTools will remain the same, regardless of the number of devices in the viewport. As in the current version of DevTools the user will be able to choose the placement of DevTools on their screen and expand/shrink the DevTools window. Initial exection of the feature will attach DevTools to one (primary) viewport. The larger goal of this project is to synchronize all the viewports with the DevTools. 67 | 68 | ### Synchronize browsing and inspection across viewports 69 | 70 | Browsing will be synchronized across devices in the viewport, meaning that scrolling in one device would mean all other devices would be kept in sync so they are displaying as close to the same content as possible. The same will also be true for inspecting and selecting items across different devices in the viewport. 71 | 72 | ## Design 73 | 74 | We have two designs: one for the feature as a whole and one for our intern project implementation. While the implementation of our project will start with *only* adding a second device, the design we created is scalable to allow for a larger number of devices all in one viewport. 75 | 76 | The first design adds an entirely new viewport (almost like a new tab) for a second device. The second design allows users to add multiple devices into a grid formation in one viewport so users can more easily view a greater number of devices. Current user research suggets that 3-5 devices on the viewport would provide greater efficiency. 77 | 78 | ![Design Mockup](DesignMockup.png) 79 | 80 | ![Design Draft 2](DesignDraft2.png) 81 | 82 | ### Open Questions and Ideas 83 | 84 | - Zoom percentage (synchronized across devices?). 85 | - The user’s device is smaller than the screen they want to test (what would the default be?). 86 | - How many screens does user want to see all at once before they need to scroll (default vs user customization). 87 | - How would this be affected by placement of sidebar. 88 | 89 | 92 | 93 | ## Changelog 94 | 95 | | Edge release | Changelog | 96 | |--------------|---------------------------------------------------------| 97 | | N/A | N/A | 98 | -------------------------------------------------------------------------------- /explainers/CommandPalette/explainer.md: -------------------------------------------------------------------------------- 1 | # DevTools:Command Palette 2 | 3 | Authors: 4 | - [Erica Draud](https://github.com/erdraud), Program Manager 5 | 6 | ## Feature status 7 | This feature is in Canary 105. 8 | 9 | ## Introduction 10 | We have evolved our [Omnibox Commands](https://github.com/MicrosoftEdge/DevTools/blob/main/explainers/Omnibox/explainer.md) experiment into the Command Palette, which is now available in Canary under a feature flag. We are excited to make DevTools and browser commands available to users in a streamlined and comprehensive platform. We've pulled some of the commands you can find in the [Command Menu]( https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/command-menu/) in DevTools, but why have these features in the browser? We know that users are often looking for ways to streamline their browsing or programming workflow, and the Command Palette enables users to do so without having to first open the Developer Tools or go down a long chain of settings or context menus. 11 | 12 | ![Command Palette](cp_main.png) 13 | 14 | To try it out today, head to [edge://flags](edge://flags) and enable the Command Palette experiment. Once it's enabled, use the keyboard shortcut `CTRL+SHIFT+SPACE` to turn it on. For more information, check out our [documentation](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/experimental-features/edge-command-palette). Let us know what you think; your suggestions just might be in the next version! 15 | 16 | ## Goals 17 | 1. To simplify DevTools users’ workflow and 18 | 2. Identify opportunities for expansion 19 | 20 | ## Features 21 | 22 | ### Home menu 23 | 24 | ![Command Palette Search Bar](cp_search.png) 25 | 26 | When the feature opens, there will be a search bar with text that prompts the user to try using different keywords to search for their command. 27 | 28 | ### DevTools 29 | 30 | ![Command Palette DevTools Commands](cp_command.png) 31 | 32 | Typing `>` will pull up the available commands for DevTools. These commands were pulled from the DevTools Command Menu. Enable Device Mode was prioritized since we’ve had direct feedback for this functionality. Most of the commands are opening panels or changing the appearance or theme of the DevTools. To access the existing commands, you can find them in the [DevTools commands](#devtools-commands) section. 33 | 34 | ### Help 35 | 36 | ![Command Palette Help Blurb](cp_help.png) 37 | 38 | If the user types a question mark `?`, we will display a short text in the drop-down menu area explaining the feature and a link to the documentation page. It will include all the command segments they can type in in case they missed it the first time they opened it. 39 | 40 | ### Search 41 | By typing a keyword, the menu options will display all the possible commands with the string provided. The search results will be segmented by their related category, whether it's DevTools or one of the many browser categories. 42 | If an option is unavailable, `No command found` will appear in the UI meant for search results. 43 | 44 | ### URL 45 | To easily access internal URLs, you can type in `edge`. This will pull up a list of all the Edge internal URLs. To access the existing URLs, click [here](#available-urls). 46 | 47 | ## Next steps 48 | * Complete rollout 49 | 50 | ## Things to consider 51 | * Commands shouldn't conflict with search engine searches 52 | 53 | ## FAQ: 54 | Q: Does it have extensibility so other could add in additional commands? 55 | 56 | A: Not in scope for this experiment, but a great idea for the future. 57 | 58 | Q: Will this require a totally separate implementation vs. upstream? or hook into theirs? 59 | 60 | A: We will be integrating directly into the Omnibox, not hooking into the upstream Commander. 61 | 62 | Q: Is there an "all" option? Will customers know to use `?` and `>`? 63 | 64 | A: We will be working with the omnibox team to clarify the best characters or strings to trigger the DevTools commands. 65 | 66 | Q: If this is integrated into the address bar, will they know to type `?` to get help on the commands that are available? 67 | 68 | A: We recognize there will be discoverability challenges, and we will be exploring that as we go. 69 | 70 | Q: Are we planning to add a toggle or setting in browser settings that enable this feature after the rollout? 71 | 72 | A: That could be a future option, but it is not in scope. 73 | 74 | Q: Are these commands going to be available for puppeteer and/or playwright? 75 | 76 | A: That is out of scope for this project. 77 | 78 | Q: Some actions do trigger opening DevTools. Is it in or out of scope to be able to complete actions without opening DevTools? 79 | 80 | A: These commands will open DevTools and conduct the requested action. The benefit is that this will be done without the user having to open the DevTools first to speed up their workflow. 81 | 82 | ## Available URLs 83 | * edge://about/ 84 | * edge://accessibility/ 85 | * edge://appcache-internals/ 86 | * edge://application-guard-internals/ 87 | * edge://apps/ 88 | * edge://autofill-internals/ 89 | * edge://blob-internals/ 90 | * edge://bluetooth-internals/ 91 | * edge://collected-cookies-dialog/ 92 | * edge://compat/ 93 | * edge://components/ 94 | * edge://conflicts/ 95 | * edge://conversion-internals/ 96 | * edge://crashes/ 97 | * edge://credits/ 98 | * edge://data-viewer 99 | * edge://device-log/ 100 | * edge://discards/ 101 | * edge://download-internals/ 102 | * edge://downloads/ 103 | * edge://edge-dip-internals/ 104 | * edge://edge-urls/ 105 | * edge://extensions/ 106 | * edge://favorites/ 107 | * edge://flags/ 108 | * edge://floc-internals/ 109 | * edge://gcm-internals/ 110 | * edge://gpu/ 111 | * edge://help/ 112 | * edge://histograms/ 113 | * edge://history/ 114 | * edge://indexeddb-internals/ 115 | * edge://inspect/ 116 | * edge://interstitials/ 117 | * edge://invalidations/ 118 | * edge://local-state 119 | * edge://management/ 120 | * edge://media-engagement/ 121 | * edge://media-internals/ 122 | * edge://net-export/ 123 | * edge://net-internals/ 124 | * edge://network-error/ 125 | * edge://newtab/ 126 | * edge://ntp-tiles-internals/ 127 | * edge://omnibox 128 | * edge://password-manager-internals/ 129 | * edge://policy/ 130 | * edge://predictors/ 131 | * edge://prefs-internals/ 132 | * edge://print/ 133 | * edge://process-internals/ 134 | * edge://push-internals/ 135 | * edge://quota-internals/ 136 | * edge://sandbox/ 137 | * edge://serviceworker-internals/ 138 | * edge://settings/ 139 | * edge://signin-internals/ 140 | * edge://site-engagement/ 141 | * edge://sync-internals/ 142 | * edge://system/ 143 | * edge://terms/ 144 | * edge://tracing/ 145 | * edge://translate-internals/ 146 | * edge://ukm/ 147 | * edge://usb-internals/ 148 | * edge://user-actions/ 149 | * edge://version/ 150 | * edge://web-app-internals/ 151 | * edge://webrtc-internals/ 152 | * edge://webrtc-logs/ 153 | * edge://whats-new/ 154 | 155 | ## DevTools commands 156 | * Appearance: Show Welcome after each update 157 | * Appearance: Switch to system preferred color theme 158 | * Console: Clear console history 159 | * Debugger: Disable JavaScript 160 | * Drawer: Show Console 161 | * Mobile: Toggle device emulation 162 | * Open dedicated DevTools for Node 163 | * Panel: Show Console 164 | * Panel: Show Elements 165 | * Panel: Show Network 166 | * Panel: Show Sources 167 | * Sources: Show Snippets 168 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | -------------------------------------------------------------------------------- /explainers/Sustainability/explainer.md: -------------------------------------------------------------------------------- 1 | 2 | # DevTools: Sustainable Web Development Feature 3 | 4 | Author: 5 | - [Taylore Givens](https://github.com/tayloregivens), Program Manager 6 | 7 | ## Status of this feature 8 | 9 | Proposal for a feature not yet in development. Please share your feedback [here](https://github.com/MicrosoftEdge/DevTools/issues/92). 10 | 11 | ## Definition 12 | 13 | web app sustainability – energy consumption and type of energy (i.e. fossil fuels/renewable) used for a web app 14 | 15 | ## Introduction 16 | 17 | The carbon impact of the internet, including the hardware, software, and systems that go into creating it, produces about [3.7%]( https://www.bbc.com/future/article/20200305-why-your-internet-habits-are-not-as-clean-as-you-think) of global carbon emissions. This is similar to the percentage of global emissions from the [airline industry](https://www.bbc.com/future/article/20200305-why-your-internet-habits-are-not-as-clean-as-you-think). Developers and the public are becoming increasingly more aware and concerned about this issue. Developers are increasingly interested in understanding **what factors impact a web app's sustainability and how to improve it's sustainability.** Consequently, tools such as [Website Carbon](https://www.websitecarbon.com/), [Ecograder](https://ecograder.com/), [EcoPing](https://ecoping.earth/blog/core-web-vitals-and-sustainability), and [Beacon](https://digitalbeacon.co/) have been created to calculate the amount of CO2 a web app emits and provide recommendations to improve the sustainability of a web app. 18 | 19 | ## Goals 20 | 21 | Adding sustainability features to DevTools will raise awareness about the alarming carbon impact of web apps and the internet and help developers measure and improve the sustainability of their web apps by 22 | - Providing proxy web app sustainability measurements 23 | - Highlighting common factors that reduce the sustainability of web apps by showing or explaining how these factors decrease performance and increase energy consumption 24 | - Indicating to developers what actions they’re currently taking, such as performance improvements, that also improve web app sustainability 25 | - Educating developers on new actions they can take that are purely beneficial for sustainability. 26 | 27 | ## Solution 28 | 29 | ### Summary 30 | 31 | - Label existing issues in the Issues panel that are beneficial to sustainability and energy efficiency 32 | - Create a “Sustainability” tab that is a hub for sustainability-related metrics and provides insights about web app energy consumption, the type of energy used to power a web app, third parties' impact on performance and energy, and best practices to improve sustainability. 33 | 34 | ### Sustainability Content Labeling in Issues Tab 35 | 36 | ![Issues Tab UI](explainer_Issues.jpg) 37 | Mockup is conceptual, not the final design 38 | 39 | #### Usage 40 | 41 | Once the user navigates to the Issues panel, any issue or category relevant to improving sustainability will have a sustainability label. Clicking this label will expand the category or issue dropdown window. The dropdown window will include a green banner describing how the category or issue is related to sustainability. The banner will also include a link to external documentation to learn more about why the category or issue is sustainability related. The banner will potentially also include a link to the DevTools Sustainability Tab (see next section). 42 | 43 | Sustainability labeling will be enabled by default but can be disabled with the checkbox to reduce noisiness. Categories or issues labeled as sustainable would be prioritized in the ordering of categories and issues. 44 | 45 | ### Sustainability Tab 46 | 47 | This tab will be a hub for sustainability-related metrics and provide insights about web app energy consumption, the type of energy used to power a web app, third parties' impact on performance and energy, and best practices to improve sustainability. 48 | 49 | Although developers requested a web app carbon calculator feature in DevTools, like [Website Carbon](https://www.websitecarbon.com/), these types of algorithms are underdeveloped and inaccurate because they often rely on inputting the byte size of a website and applying average ratios (i.e. kWh/byte and CO2 g/kWh) to get a carbon estimate. This type of algorithm is **better suited to estimate the carbon emitted from the energy used to transfer a web app over the network** rather than estimate the total carbon emissions associated with a web app. 50 | 51 | #### Content and Usage 52 | 53 | The Sustainability tab has three sections: Sustainability Analysis, Third Party Impact, and Best Practices. 54 | 55 | Sustainability Analysis 56 | > Energy Consumption 57 | > > The Client-Device Energy and Network Transfer Energy sub-sections display proxy metrics relevant to how much energy is used to render the web app on the client device and transfer it over the network to give the developer a sense of the energy consumed by the web app. 58 | > > 59 | > >Client-Device Energy 60 | > >- “Client-Device Energy Score“ is out of 100 and is based on the CPU utilization and GPU utilization of the web app's initialization compared to the average web app. The score will vary slightly depending on the client's device due to different hardware. The score should be used as a guideline metric to assess how incremental code changes affect the client device energy. 61 | > >- CPU metrics such as the average CPU utilization and the live CPU utilization 62 | > >- Link to Performance tab to further investigate CPU utilization 63 | > > 64 | > >Network Transfer Energy 65 | > >- Bytes transferred and number of network requests to give context to the amount of network activity the web app is generating 66 | > >- Use an open-source API, such as the [Green Web Foundation API](https://www.thegreenwebfoundation.org/co2-js/), to get a carbon estimate and display this value as the emissions from the energy required to transfer the web app bytes over the network. 67 | > > 68 | > Energy Type 69 | > > Display whether the web app runs on a green hosting service (i.e. service that runs on renewable energy) based on the Green Web Foundation's open source [dataset](https://www.thegreenwebfoundation.org/green-web-datasets/). 70 | > > 71 | Third-Party Impact 72 | > Third parties are often incorporated or added on top of web apps without much thought as to how they affect the weight and performance of the app. We will display the following data to help developers identify the potential negative impact third parties are having on their web app. 73 | > - number of requests made to third parties 74 | > - number of bytes transferred from these network requests/all bytes transferred 75 | > - time consumed by third-party requests/total load time for web app 76 | 77 | Best Practices 78 | > Sustainable web app design recommendations focus on making the web app as light and high-performant as possible by limiting unnecessary web app components. 79 | > 80 | > There are certain properties we recommend eliminating or adding to a web app to improve its sustainability, such as eliminating [inline CSS Styles](https://webhint.io/docs/user-guide/hints/hint-no-inline-styles/) because inline CSS can’t be cached or [minifying all your CSS and Javascript](https://webhint.io/docs/user-guide/hints/hint-minified-js/). 81 | > 82 | > However, for other properties that negatively impact sustainability, it's unreasonable to recommend that all web apps eliminate these properties such as [custom fonts or large photos](https://www.fastcompany.com/90605005/these-are-the-worlds-most-sustainable-fonts#:~:text=Arial%20and%20Times%20New%20Roman%20aren%E2%80%99t%20the%20only,custom-designed%20typefaces%2C%20this%20is%20slim%20pickings.%20%5BScreenshot%3A%20FormaFantasma%5D). Therefore, we will provide a table that shows the number of custom fonts, large photos, and other properties in a color-coded manner to indicate which counts are above or below average to give developers a sense of how sustainable their website is compared to other sites. 83 | 84 | We welcome community feedback on this concept and the content proposed. 85 | -------------------------------------------------------------------------------- /explainers/Omnibox/explainer.md: -------------------------------------------------------------------------------- 1 | 2 | # DevTools: Omnibox Commands 3 | 4 | Authors: 5 | - [Erica Draud](https://github.com/erdraud), Program Manager 6 | 7 | ## Status of this feature 8 | Experiment has evolved and is now in Canary. See [Command Palette](https://github.com/MicrosoftEdge/DevTools/blob/main/explainers/CommandPalette/explainer.md) for more information. 9 | 10 | ## Introduction 11 | Earlier this year, the Chrome team released the [Commander]( https://bugs.chromium.org/p/chromium/issues/detail?id=1014639) as a text interface that provides a shortcut for common commands for browser users. The DevTools team used this as the framework for their Omnibar hackathon project. There’s some uncertainty around the usage and discoverability of the tool, so we’re starting with a flagged experiment. 12 | 13 | ![Omnibox UI](omni.PNG) 14 | 15 | You’ll notice that many of the commands in this feature can be found in the [Command Menu]( https://learn.microsoft.com/microsoft-edge/devtools-guide-chromium/command-menu/) in DevTools, so why have these features in the address bar (from this point forward referred to as the omnibox)? We know that users would like a faster way to complete their tasks in DevTools, and the Omnibox Commands feature enables users to do so without having to first open the Developer Tools. Additionally, we’ve included features that are specific to the browser window: Edge internal urls and last viewed pages. 16 | 17 | ## Goals 18 | 1. To simplify DevTools users’ workflow and 19 | 2. To test the following hypotheses: 20 | * Users will find this valuable in that it will save them time by minimizing the steps users need in their DevTools workflow; we'll know it's true if 20% of users are 2-week active users (returning users). 21 | * Users will use navigation commands more than action commands; we'll know it's true if the number of navigation commands is at least 20% more than the number of action commands. 22 | * Users will have trouble finding this feature without a tooltip/pop-up; we'll know it's true with overall usage (if people turn it on). 23 | 24 | This initial experiment will run as a flagged rollout especially since the UI may also affect users outside of DevTools. We will test all three hypotheses and focus on iterating for validating the feature’s value as well as which commands are most valuable. 25 | 26 | ## Features 27 | 28 | ### URL 29 | To easily access internal URLs, you can type in a question mark `?`. This will pull up a list of all the Edge internal URLs. To access the existing URLs, click [here](#available-urls). 30 | 31 | ### Command 32 | Typing `>` will pull up the available commands for DevTools. These commands were exported from those available in DevTools now. The only command added to the list that hasn’t already been added to the Commander experiment is *Device Mode: Enable Device Mode*, and we will omit this command if we don’t have time in the first iteration to add it. Most of these commands are opening panels or changing the appearance or theme of the DevTools. To access the existing commands, click [here](#available-commands). 33 | 34 | ### Search 35 | If you type something in that isn’t a command, the Omnibox will display an option to search the text typed in the user’s preferred search engine. 36 | 37 | ### Recently closed 38 | To get a list of the webpages you recently closed, type `#`. 39 | 40 | ## Next steps 41 | * Design review 42 | * Flagged rollout 43 | * Add Documentation Search 44 | 45 | ## Things to consider 46 | * Commands shouldn't conflict with search engine searches 47 | * Accessibility and privacy compliance needs work 48 | * Need to remove Chrome's petal suggestions for technical, localization, and business reasons. 49 | * Commands are relatively easy to add, so we can always add more in the future 50 | 51 | ## FAQ: 52 | Q: Does it have extensibility so other could add in additional commands? 53 | A: Not in scope for this experiment, but a great idea for the future. 54 | Q: Will this require a totally separate implementation vs. upstream? or hook into theirs? 55 | A: We will be integrating directly into the Omnibox, not hooking into the upstream Commander. 56 | Q: Is there an "all" option? Will customers know to use `?` and `>`? 57 | A: We will be working with the omnibox team to clarify the best characters or strings to trigger the DevTools commands. 58 | Q: If this is integrated into the address bar, will they know to type `?` to get help on the commands that are available? 59 | A: We recognize there will be discoverability challenges, and we will be exploring that as we go. 60 | Q: Are we planning to add a toggle or setting in browser settings that enable this feature after the rollout? 61 | A: That could be a future option, but it is not in scope. 62 | Q: Are these commands going to be available for puppeteer and/or playwright? 63 | A: That is out of scope for this project. 64 | Q: Some actions do trigger opening DevTools. Is it in or out of scope to be able to complete actions without opening DevTools? 65 | A: These commands will open DevTools and conduct the requested action. The benefit is that this will be done without the user having to open the DevTools first to speed up their workflow. 66 | 67 | ## Available URLs 68 | * edge://about/ 69 | * edge://accessibility/ 70 | * edge://appcache-internals/ 71 | * edge://application-guard-internals/ 72 | * edge://apps/ 73 | * edge://autofill-internals/ 74 | * edge://blob-internals/ 75 | * edge://bluetooth-internals/ 76 | * edge://collected-cookies-dialog/ 77 | * edge://compat/ 78 | * edge://components/ 79 | * edge://conflicts/ 80 | * edge://conversion-internals/ 81 | * edge://crashes/ 82 | * edge://credits/ 83 | * edge://data-viewer 84 | * edge://device-log/ 85 | * edge://discards/ 86 | * edge://download-internals/ 87 | * edge://downloads/ 88 | * edge://edge-dip-internals/ 89 | * edge://edge-urls/ 90 | * edge://extensions/ 91 | * edge://favorites/ 92 | * edge://flags/ 93 | * edge://floc-internals/ 94 | * edge://gcm-internals/ 95 | * edge://gpu/ 96 | * edge://help/ 97 | * edge://histograms/ 98 | * edge://history/ 99 | * edge://indexeddb-internals/ 100 | * edge://inspect/ 101 | * edge://interstitials/ 102 | * edge://invalidations/ 103 | * edge://local-state 104 | * edge://management/ 105 | * edge://media-engagement/ 106 | * edge://media-internals/ 107 | * edge://net-export/ 108 | * edge://net-internals/ 109 | * edge://network-error/ 110 | * edge://newtab/ 111 | * edge://ntp-tiles-internals/ 112 | * edge://omnibox 113 | * edge://password-manager-internals/ 114 | * edge://policy/ 115 | * edge://predictors/ 116 | * edge://prefs-internals/ 117 | * edge://print/ 118 | * edge://process-internals/ 119 | * edge://push-internals/ 120 | * edge://quota-internals/ 121 | * edge://sandbox/ 122 | * edge://serviceworker-internals/ 123 | * edge://settings/ 124 | * edge://signin-internals/ 125 | * edge://site-engagement/ 126 | * edge://sync-internals/ 127 | * edge://system/ 128 | * edge://terms/ 129 | * edge://tracing/ 130 | * edge://translate-internals/ 131 | * edge://ukm/ 132 | * edge://usb-internals/ 133 | * edge://user-actions/ 134 | * edge://version/ 135 | * edge://web-app-internals/ 136 | * edge://webrtc-internals/ 137 | * edge://webrtc-logs/ 138 | * edge://whats-new/ 139 | 140 | ## Available commands 141 | * Panel: Show Application 142 | * Panel: Show Console 143 | * Panel: Show Detached Elements 144 | * Panel: Show Elements 145 | * Panel: Show JavaScript Profiler 146 | * Panel: Show Layers 147 | * Panel: Show Lighthouse 148 | * Panel: Show Media 149 | * Panel: Show Memory 150 | * Panel: Show Network Drawer 151 | * Panel: Show Performance 152 | * Panel: Show Security 153 | * Panel: Show Sources 154 | * Panel: Show Welcome 155 | * Drawer: Focus debugger 156 | * Drawer: Show 3D View 157 | * Drawer: Show Animations 158 | * Drawer: Show Changes 159 | * Drawer: Show Console 160 | * Drawer: Show Coverage 161 | * Drawer: Show Developer Resources 162 | * Drawer: Show Issues 163 | * Drawer: Show Memory Inspector 164 | * Drawer: Show Network Console 165 | * Drawer: Show Network conditions 166 | * Drawer: Show Network request blocking 167 | * Drawer: Show Performance monitoring 168 | * Drawer: Show Quick source 169 | * Drawer: Show Rendering 170 | * Drawer: Show Search 171 | * Drawer: Show Sensors 172 | * Drawer: Show WebAudio 173 | * Drawer: Show WebAuthn 174 | * Drawer: Toggle drawer 175 | * Settings: Documentation 176 | * Settings: Settings 177 | * Settings: Shortcuts 178 | * Settings: Show Devices 179 | * Settings: Show Experiments 180 | * Settings: Show Library Code 181 | * Settings: Show Locations 182 | * Settings: Show Preferences 183 | * Settings: Show Shortcuts 184 | * Settings: Show Throttling 185 | * Appearance: Browser UI language 186 | * Appearance: Chinese (Simplified) 187 | * Appearance: Chinese (Traditional) 188 | * Appearance: Do not show Welcome after each update 189 | * Appearance: French 190 | * Appearance: German 191 | * Appearance: Italian 192 | * Appearance: Japanese 193 | * Appearance: Korean 194 | * Appearance: Portuguese 195 | * Appearance: Russian 196 | * Appearance: Set color format to HEX 197 | * Appearance: Set color format to HSL 198 | * Appearance: Set color format to RGB 199 | * Appearance: Spanish 200 | * Appearance: Switch to Abyss theme 201 | * Appearance: Switch to Chromium Dark theme 202 | * Appearance: Switch to Chromium Light theme 203 | * Appearance: Switch to Dark+ (Default) theme 204 | * Appearance: Switch to Kimbie Dark theme 205 | * Appearance: Switch to Light+ (Default) theme 206 | * Appearance: Switch to Monokai Dimmed theme 207 | * Appearance: Switch to Monokai theme 208 | * Appearance: Switch to Quiet Light theme 209 | * Appearance: Switch to Red theme 210 | * Appearance: Switch to Solarized Dark theme 211 | * Appearance: Switch to Solarized Light theme 212 | * Appearance: Switch to system preferred color theme 213 | * Appearance: Use horizontal pane layout 214 | * Appearance: Use vertical pane layout 215 | * Console: Clear console history 216 | * Console: Create live expression 217 | * Console: Do not autocomplete from history 218 | * Console: Do not eagerly evaluate console prompt text 219 | * Console: Do not group similar messages in console 220 | * Console: Do not treat evaluation as user activation 221 | * Console: Hide network messages 222 | * Console: Only show messages from the current context (top, iframe worke… 223 | * Console: Preserve log upon navigation 224 | * Console: Show Console 225 | * Console: Show timestamps 226 | * Debugger: Disable JavaScript 227 | * Debugger: Do not capture async stack traces 228 | * Debugger: Pause on exceptions 229 | * Device Mode: Enable Device Mode 230 | * Elements: Copy styles 231 | * Elements: Disable DOM word wrap 232 | * Elements: Duplicate element 233 | * Elements: Edit as HTML 234 | * Elements: Hide HTML comments 235 | * Elements: Hide element 236 | * Elements: Redo 237 | * Elements: Select an element in the page to inspect it 238 | * Elements: Show Accessibility 239 | * Elements: Show DOM Breakpoints 240 | --------------------------------------------------------------------------------