Repository: microsoft/vscode-edge-devtools
Pull request #414 (2021-06-11 21:09:24)

update to V91 of devtools
This PR updates the included version of the Devtools from v88 to v91. This includes
- Updating the devtools files to be a standard debug build of devtools instead of a modified release build
- Updating Polyfills to new code and file structure

Notable additions in this update:
- CSS grid and flexbox features
- Tooltips
- Welcome tab replaces What's new


Patch:
diff --git a/package.json b/package.json
index 7044ba6..ebc9cd5 100644
--- a/package.json
+++ b/package.json
@@ -205,9 +205,9 @@
                     "description": "Show service and shared workers in the target list.",
                     "default": false
                 },
-                "vscode-edge-devtools.whatsNew": {
+                "vscode-edge-devtools.welcome": {
                     "type": "boolean",
-                    "description": "Enable What's New panel in the drawer (requires relaunching extension)",
+                    "description": "Enable Welcome panel (requires relaunching extension)",
                     "default": true
                 },
                 "vscode-edge-devtools.headless": {
diff --git a/postBuildStep.ts b/postBuildStep.ts
index a31670b..246a3fc 100644
--- a/postBuildStep.ts
+++ b/postBuildStep.ts
@@ -3,9 +3,8 @@
 import * as fse from 'fs-extra';
 import path from 'path';
 
-import { applyPaddingInlineCssPatch } from './src/host/polyfills/cssPaddingInline';
 import { applyRuntimeImportScriptPathPrefixPatch } from './src/host/polyfills/runtime';
-import {applyAnnouncementNamePatch, applyGithubLinksPatch, applyReleaseNotePatch} from './src/host/polyfills/releaseNote';
+import {applyAnnouncementNamePatch, applyReleaseNotePatch, applySettingsCheckboxPatch, applyShowMorePatch} from './src/host/polyfills/releaseNote';
 import {
     applyAppendTabOverridePatch,
     applyAppendTabConditionsPatch,
@@ -17,7 +16,6 @@ import {
     applyExtensionSettingsInstantiatePatch,
     applyExtensionSettingsRuntimeObjectPatch,
     applyPortSettingsFunctionCallPatch,
-    applyPortSettingsFunctionCreationPatch,
     applyQuickOpenPatch,
     applyInspectorCommonContextMenuPatch,
     applyInspectorCommonCssPatch,
@@ -28,23 +26,25 @@ import {
     applyInspectorViewShowDrawerPatch,
     applyMainViewPatch,
     applyMoveToContextMenuPatch,
-    applyPersistDrawerTabs,
+    applyPersistTabs,
     applyQueryParamsObjectPatch,
     applyRemoveBreakOnContextMenuItem,
     applyRerouteConsoleMessagePatch,
     applyContextMenuRevealOption,
     applyRemovePreferencePatch,
-    applyScreencastAppPatch,
     applyScreencastCursorPatch,
     applyScreencastTelemetry,
     applyScreencastHeadlessPatch,
-    applyScreencastRepaintPatch,
     applySetTabIconPatch,
     applyShowDrawerTabs,
     applyStylesRevealerPatch,
     applyStylesToggleFocusPatch,
     applyThemePatch,
     applyNoMatchingStylesPatch,
+    applyExtensionSettingExportPatch,
+    applyPortSettingsFunctionCreationPatch,
+    applyConsoleImportPatch,
+    applyExperimentsEnabledPatch,
 } from './src/host/polyfills/simpleView';
 import { applySetupTextSelectionPatch } from './src/host/polyfills/textSelection';
 import { applyThirdPartyI18nLocalesPatch } from './src/host/polyfills/thirdPartyI18n';
@@ -65,12 +65,6 @@ async function copyStaticFiles() {
 
     const sourceFilesPath = path.normalize(__dirname + '/out/edge/src');
 
-    const toolsSrcDir = path.normalize(`${sourceFilesPath}/third_party/devtools-frontend/src/front_end/`);
-    if (!isDirectory(toolsSrcDir)) {
-        throw new Error(`Could not find Microsoft Edge DevTools path at '${toolsSrcDir}'. ` +
-            "Did you run the 'npm run download-edge' script?");
-    }
-
     const toolsGenDir = path.normalize(`${sourceFilesPath}/out/Release/gen/devtools/`);
     if (!isDirectory(toolsGenDir)) {
         throw new Error(`Could not find Microsoft Edge output path at '${toolsGenDir}'. ` +
@@ -83,7 +77,6 @@ async function copyStaticFiles() {
     const toolsOutDir = './out/tools/front_end/';
     await fse.remove('./out/tools/front_end/');
     await fse.ensureDir(toolsOutDir);
-    await fse.copy(toolsSrcDir, toolsOutDir);
 
     // Copy the devtools generated files to the out directory
     await fse.copy(toolsGenDir, toolsOutDir);
@@ -113,78 +106,98 @@ async function patchFilesForWebView(toolsOutDir: string) {
         applyInspectorCommonNetworkPatch,
         applyInspectorCommonCssTabSliderPatch,
     ]);
-    await patchFileForWebViewWrapper('main/main.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('main/MainImpl.js', toolsOutDir, [
         applyInspectorViewCloseDrawerPatch,
         applyMainViewPatch,
-        applyScreencastAppPatch,
+        applyExperimentsEnabledPatch,
     ]);
-    await patchFileForWebViewWrapper('common/common.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('core/common/Revealer.js', toolsOutDir, [
         applyCommonRevealerPatch,
     ]);
-    await patchFileForWebViewWrapper('components/components.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('components/Linkifier.js', toolsOutDir, [
         applyContextMenuRevealOption,
     ]);
-    await patchFileForWebViewWrapper('elements/elements_module.js', toolsOutDir, [
-        applyPaddingInlineCssPatch,
+    // Post built files swap upstream and downstream names
+    await patchFileForWebViewWrapper('panels/elements/StylesSidebarPane_edge.js', toolsOutDir, [
+        applyNoMatchingStylesPatch
     ]);
-    await patchFileForWebViewWrapper('elements/elements.js', toolsOutDir, [
-        applyNoMatchingStylesPatch,
+    await patchFileForWebViewWrapper('panels/elements/ElementsPanel.js', toolsOutDir, [
         applySetupTextSelectionPatch,
+    ]);
+    await patchFileForWebViewWrapper('panels/elements/StylePropertyTreeElement.js', toolsOutDir, [
         applyStylesRevealerPatch,
         applyStylesToggleFocusPatch,
     ]);
-    await patchFileForWebViewWrapper('host/host.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('core/host/InspectorFrontendHost.js', toolsOutDir, [
         applyRemovePreferencePatch,
     ]);
-    await patchFileForWebViewWrapper('screencast/screencast.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('screencast/ScreencastView.js', toolsOutDir, [
         applyScreencastCursorPatch,
+    ]);
+    await patchFileForWebViewWrapper('screencast/ScreencastApp.js', toolsOutDir, [
         applyScreencastTelemetry,
         applyScreencastHeadlessPatch,
-        applyScreencastRepaintPatch,
     ]);
-    await patchFileForWebViewWrapper('ui/ui.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('ui/legacy/TabbedPane.js', toolsOutDir, [
         applyAppendTabOverridePatch,
         applyAppendTabConditionsPatch,
-        applyDefaultTabPatch,
+        applyPersistTabs,
+        applySetTabIconPatch,
+    ]);
+    await patchFileForWebViewWrapper('ui/legacy/InspectorView.js', toolsOutDir, [
+        applyMoveToContextMenuPatch,
+    ]);
+    await patchFileForWebViewWrapper('ui/legacy/InspectorView_edge.js', toolsOutDir, [
         applyDrawerTabLocationPatch,
         applyInspectorViewShowDrawerPatch,
-        applyMoveToContextMenuPatch,
-        applyPersistDrawerTabs,
-        applySetTabIconPatch,
+    ]);
+    await patchFileForWebViewWrapper('ui/legacy/ViewManager.js', toolsOutDir, [
+        applyDefaultTabPatch,
         applyShowDrawerTabs,
     ]);
-    await patchFileForWebViewWrapper('root/root.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('core/root/Runtime_edge.js', toolsOutDir, [
+        applyQueryParamsObjectPatch,
+        applyRuntimeImportScriptPathPrefixPatch,
+    ]);
+    await patchFileForWebViewWrapper('core/root/Runtime.js', toolsOutDir, [
         applyExtensionSettingsInstantiatePatch,
         applyExtensionSettingsRuntimeObjectPatch,
+        applyExtensionSettingExportPatch,
         applyPortSettingsFunctionCallPatch,
         applyPortSettingsFunctionCreationPatch,
-        applyQueryParamsObjectPatch,
-        applyRuntimeImportScriptPathPrefixPatch,
     ]);
-    await patchFileForWebViewWrapper('root/root-legacy.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('core/root/root-legacy.js', toolsOutDir, [
         applyCreateExtensionSettingsLegacyPatch,
     ]);
-    await patchFileForWebViewWrapper('quick_open/quick_open.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('quick_open/CommandMenu_edge.js', toolsOutDir, [
         applyCommandMenuPatch,
+    ]);
+    await patchFileForWebViewWrapper('quick_open/QuickOpen.js', toolsOutDir, [
         applyQuickOpenPatch,
     ]);
-    await patchFileForWebViewWrapper('browser_debugger/browser_debugger.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('panels/browser_debugger/DOMBreakpointsSidebarPane.js', toolsOutDir, [
         applyRemoveBreakOnContextMenuItem,
     ]);
-    await patchFileForWebViewWrapper('themes/themes.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('themes/ThemesImpl.js', toolsOutDir, [
         applyThemePatch,
     ]);
-    await patchFileForWebViewWrapper('help/help.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('welcome/WelcomePanel.js', toolsOutDir, [
         applyAnnouncementNamePatch,
-        applyGithubLinksPatch,
+        applySettingsCheckboxPatch,
+    ]);
+    await patchFileForWebViewWrapper('panels/help/ReleaseNoteText.js', toolsOutDir, [
         applyReleaseNotePatch,
     ]);
-    await patchFileForWebViewWrapper('sdk/sdk.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('core/sdk/ConsoleModel.js', toolsOutDir, [
         applyRerouteConsoleMessagePatch,
+        applyConsoleImportPatch,
     ]);
-    await patchFileForWebViewWrapper('i18n/i18n.js', toolsOutDir, [
+    await patchFileForWebViewWrapper('third_party/i18n/i18n-bundle.js', toolsOutDir, [
         applyThirdPartyI18nLocalesPatch,
     ]);
+    await patchFileForWebViewWrapper('welcome/WhatsNewList.js', toolsOutDir, [
+        applyShowMorePatch,
+    ]);
 }
 
 // This function wraps the patchFileForWebView function to catch any errors thrown, log them
diff --git a/scripts/downloadAndExtractEdge.js b/scripts/downloadAndExtractEdge.js
index d6b6928..99a8dfa 100644
--- a/scripts/downloadAndExtractEdge.js
+++ b/scripts/downloadAndExtractEdge.js
@@ -1,28 +1,22 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 
-const TARGET_VERSION = '88.0.705.9';
+const fs = require('fs-extra');
+const path = require('path');
+const yargs = require('yargs');
+const https = require('https');
+const unzipper = require('unzipper');
+const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
+
+
+const TARGET_VERSION = '91.0.864.48';
 const targetVersionMap = new Map([
-  ['83', '83.0.478.45'],
-  ['84', '84.0.522.63'],
-  ['85', '85.0.564.40'],
-  ['86', '86.0.623.0'],
-  ['87', '87.0.668.0'],
-  ['88', '88.0.705.9']
+  ['88', '88.0.705.9'],
+  ['91', '91.0.864.48'],
 ]);
-var isWindows = true;
-
-function getTargetVersion(version) {
-  let fullVersion = targetVersionMap.get(version);
-  if (!fullVersion) {
-    fullVersion = TARGET_VERSION;
-  }
-  return fullVersion;
-}
 
 function fetchJsonFromUrl(url){
-  var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
-  var Httpreq = new XMLHttpRequest();
+  const Httpreq = new XMLHttpRequest();
   Httpreq.open("GET", url, false);
   Httpreq.send(null);
   return Httpreq.responseText;
@@ -31,10 +25,8 @@ function fetchJsonFromUrl(url){
 function fetchDownloadUrl(version) {
   const jsonString = fetchJsonFromUrl('https://thirdpartysource.microsoft.com/downloads');
   const jsonObjects = JSON.parse(jsonString);
-  let fullVersion = TARGET_VERSION;
-  if (version) {
-    fullVersion = getTargetVersion(version);
-  }
+  const fullVersion = version ? targetVersionMap.get(version.toString()) : TARGET_VERSION;
+
   console.log(`Downloading Microsoft Edge DevTools version ${fullVersion}`);
   for (let object of jsonObjects) {
     if (object.product === 'Microsoft Edge DevTools' && object.release === fullVersion) {
@@ -43,17 +35,7 @@ function fetchDownloadUrl(version) {
   }
 }
 
-function removeLastDirectory(filepath) {
-  const splitChar = isWindows ? '\\' : '/';
-  const arr = filepath.split(splitChar);
-  arr.pop();
-  return( arr.join(splitChar) );
-}
-
 async function downloadZipFile(downloadUrl) {
-  const https = require('https');
-  const fs = require('fs-extra');
-  const unzipper = require('unzipper');
   await fs.remove('out/edge');
 
   const file = fs.createWriteStream('edge.zip');
@@ -62,19 +44,29 @@ async function downloadZipFile(downloadUrl) {
     response.on('end', async ()=>{
       await fs.createReadStream('edge.zip').pipe(unzipper.Extract({path: 'out/edge/'}));
       await fs.unlink('edge.zip', () => {} );
-      let dirName = __dirname;
-      if (isWindows) {
-        const flipSlashDirName = dirName.replace(/\//g, '\\');
-        const rootPath = removeLastDirectory(flipSlashDirName);
-        console.log('Edge files extracted to: ' + rootPath + '\\out\\edge\n');
-      } else {
-        const rootPath = removeLastDirectory(dirName);
-        console.log('Edge files extracted to: ' + rootPath + '/out/edge');
-      }
+      const outdir = path.join(__dirname, 'out', 'edge');
+      console.log(`Edge files extracted to: ${outdir}`);
     });
   });
 }
 
-const version = process.argv.slice(2)[0];
-const downloadUrl = fetchDownloadUrl(version);
-downloadZipFile(downloadUrl);
+const usageMessage =
+`
+Script to download the devtools frontend files needed to build the extension
+node scripts/downloadAndExtractEdge --devtoolsVersion
+    devtoolsVersion: optional version number to build a specific version of devtools.
+    Defaults to latest version.
+`;
+
+async function main() {
+  const args = yargs.parse(process.argv);
+  if (args.usage) {
+    console.log(usageMessage);
+    return;
+  }
+  const version = args.devtoolsVersion || undefined;
+  const downloadUrl = fetchDownloadUrl(version);
+  await downloadZipFile(downloadUrl);
+}
+
+main();
diff --git a/src/common/settingsProvider.ts b/src/common/settingsProvider.ts
index bddef34..67f541e 100644
--- a/src/common/settingsProvider.ts
+++ b/src/common/settingsProvider.ts
@@ -20,10 +20,10 @@ export class SettingsProvider {
     return themeString;
   }
 
-  getWhatsNewSettings(): boolean {
+  getWelcomeSettings(): boolean {
     const settings = vscode.workspace.getConfiguration(SETTINGS_STORE_NAME);
-    const whatsNewEnabled: boolean = settings.get('whatsNew') || false;
-    return whatsNewEnabled;
+    const welcomeEnabled: boolean = settings.get('welcome') || false;
+    return welcomeEnabled;
   }
 
   getHeadlessSettings(): boolean {
diff --git a/src/devtoolsPanel.ts b/src/devtoolsPanel.ts
index 59446e1..745d0e6 100644
--- a/src/devtoolsPanel.ts
+++ b/src/devtoolsPanel.ts
@@ -168,7 +168,7 @@ export class DevToolsPanel {
     }
 
     private onSocketConsoleOutput(message: string) {
-        const { consoleMessage } = JSON.parse(message) as { consoleMessage: string };
+        const { consoleMessage } = JSON.parse(message) as { consoleMessage : string };
         this.consoleOutput.appendLine(consoleMessage);
     }
 
@@ -218,7 +218,7 @@ export class DevToolsPanel {
         encodeMessageForChannel(msg => this.panel.webview.postMessage(msg) as unknown as void, 'getVscodeSettings', {
             enableNetwork: SettingsProvider.instance.isNetworkEnabled(),
             themeString: SettingsProvider.instance.getThemeSettings(),
-            whatsNew: SettingsProvider.instance.getWhatsNewSettings(),
+            welcome: SettingsProvider.instance.getWelcomeSettings(),
             isHeadless: SettingsProvider.instance.getHeadlessSettings(),
             id });
     }
diff --git a/src/host/polyfills/cssPaddingInline.ts b/src/host/polyfills/cssPaddingInline.ts
deleted file mode 100644
index bdbfa26..0000000
--- a/src/host/polyfills/cssPaddingInline.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-export function applyPaddingInlineCssPatch(content: string): string | null {
-    const separator = '\\n';
-    const cssHeaderContents =
-    `.elements-disclosure .gutter-container {
-        display: none !important;
-    }`.replace(/\n/g, separator);
-    const elementsPattern = /(\.elements-disclosure\s*\.gutter-container\s*\{([^\}]*)?\})/g;
-    let result;
-    if (content.match(elementsPattern)) {
-        result = content.replace(elementsPattern, cssHeaderContents);
-    } else {
-        return null;
-    }
-
-    const paddingPattern = /([^-])padding-inline-start:/g;
-    if (result.match(paddingPattern)) {
-        return result.replace(paddingPattern, '$1-webkit-padding-start:');
-    }
-        return null;
-
-}
diff --git a/src/host/polyfills/releaseNote.ts b/src/host/polyfills/releaseNote.ts
index a7ab894..2f753ac 100644
--- a/src/host/polyfills/releaseNote.ts
+++ b/src/host/polyfills/releaseNote.ts
@@ -4,20 +4,30 @@
 import {devtoolsHighlights, extensionHighlights} from './releaseNoteContent';
 
 export function applyReleaseNotePatch(content: string): string | null {
-    const releaseNoteTextPattern = /const releaseNoteText\s*=\s*\[[\s\S]+var ReleaseNoteText_edge\s*=/;
+    // This patch changes the content for the Welcome tab.
+    const releaseNoteTextPattern = /const releaseNoteText\s*=\s*\[[\s\S]+export\s*{\s*releaseNoteText\s*};/;
     const replacementNotes = `
         export const releaseNoteText = [
             {
             version: 1,
-            header: ls\`Highlights from the latest version of Microsoft Edge Developer Tools for Visual Studio Code\`,
+            header: i18nLazyString('Highlights from the latest version of Microsoft Edge Developer Tools for Visual Studio Code'),
             highlightsEdge: ${extensionHighlights}
             highlights: ${devtoolsHighlights}
-            githubLink: 'https://github.com/microsoft/vscode-edge-devtools',
-            issuesLink: 'https://github.com/microsoft/vscode-edge-devtools/issues',
+            help: [
+                {
+                    title: i18nLazyString("Microsoft Edge DevTools for VS Code Documentation"),
+                    link: 'https://microsoft.github.io/vscode-edge-devtools/',
+                },
+                {
+                    title: i18nLazyString(UIStrings.devToolsForBeginners),
+                    link: 'https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/beginners/html',
+                },
+                { title: i18nLazyString("Visit our GitHub Page"), link: 'https://www.twitter.com/EdgeDevTools' },
+                { title: i18nLazyString(UIStrings.submitFeedback), link: 'https://github.com/microsoft/vscode-edge-devtools/issues' },
+                { title: i18nLazyString(UIStrings.followOnTwitter), link: 'https://www.twitter.com/EdgeDevTools' },
+            ],
             },
         ];
-
-        var ReleaseNoteText_edge =
     `;
 
     if (releaseNoteTextPattern.exec(content)) {
@@ -27,29 +37,29 @@ export function applyReleaseNotePatch(content: string): string | null {
 
 }
 
-export function applyGithubLinksPatch(content: string): string | null {
-    const linkPattern = /const learnMore\s*=[\s\S]+learnMore\);/g;
-    const linkReplacementText = `
-        const githubLink = XLink.XLink.create(releaseNote.githubLink, ls \`Visit our Github Page\`, 'release-note-link-learn-more');
-        actionContainer.appendChild(githubLink);
-        const issuesContainer = buttonContainer.createChild('div', 'release-note-action-container');
-        const issuesLink = XLink.XLink.create(releaseNote.issuesLink, ls \`Send us feedback\`, 'release-note-link-learn-more');
-        issuesContainer.appendChild(issuesLink);
-    `;
-    if (linkPattern.exec(content)) {
-        return content.replace(linkPattern, linkReplacementText);
+export function applyAnnouncementNamePatch(content: string): string | null {
+    // This patch changes the section headers for the Welcome tab.
+    const chromiumAnnouncement = /UIStrings\.chromiumHighlightsTitle/;
+    if (chromiumAnnouncement.exec(content)) {
+        return content.replace(chromiumAnnouncement, '\'New in Developer Tools\'');
     }
-        return null;
-
+    return null;
 }
 
-export function applyAnnouncementNamePatch(content: string): string | null {
-    const microsoftAnnouncement = /Announcements from the Microsoft Edge DevTools team/;
-    const chromiumAnnouncement = /Announcements from the Chromium project/;
-    if (microsoftAnnouncement.exec(content) && chromiumAnnouncement.exec(content)) {
-        content = content.replace(microsoftAnnouncement, 'New extension features');
-        return content.replace(chromiumAnnouncement, 'New in Developer Tools');
+export function applyShowMorePatch(content: string): string | null {
+    // This patch removes the empty href in the 'Show more' button so that VS Code doesn't try to open a blank web page.
+    const hrefText = /href=""/;
+    if (hrefText.exec(content)) {
+        return content.replace(hrefText, '');
     }
-        return null;
+    return null;
+}
 
+export function applySettingsCheckboxPatch(content: string): string | null {
+    // This patch removes the checkbox on the page to enable/disable the Welcome tool. We already handle that in the extension settings.
+    const hrefText = /titleContainer\.appendChild\(this\.startupCheckBox\);/;
+    if (hrefText.exec(content)) {
+        return content.replace(hrefText, '');
+    }
+    return null;
 }
diff --git a/src/host/polyfills/releaseNoteContent.ts b/src/host/polyfills/releaseNoteContent.ts
index a9ae739..86f9942 100644
--- a/src/host/polyfills/releaseNoteContent.ts
+++ b/src/host/polyfills/releaseNoteContent.ts
@@ -3,58 +3,45 @@
 
 export const extensionHighlights = `[
     {
-        title: ls\`New integration with VSCode's JavaScript Debugger\`,
+        title: i18nLazyString("Introducing the new 'Welcome' tab!"),
         subtitle:
-            ls\`JavaScript Debugger can now ask Microsoft Edge Devtools to attach to the active debug target.\`,
-        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/391',
+            i18nLazyString("The 'Welcome' tab has replaced the What's New tab as part of the Edge DevTools version update."),
+        link: 'https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/whats-new/2021/01/devtools#whats-new-is-now-welcome',
     },
     {
-        title: ls\`Bug Fix for accessibility in the styles property pane\`,
+        title: i18nLazyString("Major Edge DevTools Version update"),
         subtitle:
-            ls\`Screen readers now announces a success message for when using the "Toggle Property and continue editing" option in the style property context menu.\`,
-        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/390',
+            i18nLazyString("We have updated the DevTools version from 88 to 91.  Check out all the major new features in the section below!"),
+        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/414',
     },
     {
-        title: ls\`New default start page when launching Edge DevTools\`,
+        title: i18nLazyString("New home for Microsoft Edge DevTools for VS Code documentation"),
         subtitle:
-            ls\`Launch page contains useful links and instructions to help get you started.\`,
-        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/350',
-    },
-    {
-        title: ls\`New landing view for the sidebar when no targets are available\`,
-        subtitle:
-            ls\`The view contains instructions and buttons to help launch a target or configure your project's launch.json file.\`,
-        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/357',
-    },
-    {
-        title: ls\`New triple dot dropdown menu on extension sidebar\`,
-        subtitle:
-            ls\`Dropdown menu contains links to extension settings and changelog.\`,
-        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/288',
-    },
-    {
-        title: ls\`Hide and show service and shared workers\`,
-        subtitle:
-            ls\`Created new settings checkbox that will hide or show service and shared workers in the target list (default to hide).\`,
-        link: 'https://github.com/microsoft/vscode-edge-devtools/pull/284',
+            i18nLazyString("Find our new location for all up-to-date documentation regarding this extension!"),
+        link: 'https://microsoft.github.io/vscode-edge-devtools/',
     },
 ],`;
 
 export const devtoolsHighlights = `[
     {
-        title: ls\`Use improved CSS Grid tools\`,
+        title: i18nLazyString("New Flexbox (flex) icon helps identify and display flex containers"),
         subtitle:
-            ls\`Now you can debug and inspect CSS Grids with persistent overlays, with support for multiple grids, and the new Layout tool.\`,
-        link: 'https://go.microsoft.com/fwlink/?linkid=2146827',
+            i18nLazyString("In the Elements tool, the new Flexbox (flex) icon helps you identify Flexbox containers in your code."),
+        link: 'https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/whats-new/2021/01/devtools#new-flexbox-flex-icon-helps-identify-and-display-flex-containers',
+    },
+    {
+        title: i18nLazyString("Display alignment icons and visual guides when Flexbox layouts change using CSS properties"),
+        subtitle: i18nLazyString("When you edit CSS for your Flexbox layout, CSS autocompletes in the Styles pane now displays helpful icons next to relevant Flexbox properties."),
+        link: 'https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/whats-new/2021/01/devtools#display-alignment-icons-and-visual-guides-when-flexbox-layouts-change-using-css-properties',
     },
     {
-        title: ls\`Learn about updates to the Elements tool\`,
-        subtitle: ls\`View the Computed pane in the Styles pane, and more.\`,
-        link: 'https://go.microsoft.com/fwlink/?linkid=2146829',
+        title: i18nLazyString("Improved CSS flexbox editing with visual flexbox editor and multiple overlays"),
+        subtitle: i18nLazyString("DevTools now has dedicated CSS flexbox debugging tools. If the display: flex or display: inline-flex CSS style is applied to an HTML element, a flex icon displays next to that element in the Elements tool."),
+        link: 'https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/whats-new/2021/02/devtools#improved-css-flexbox-editing-with-visual-flexbox-editor-and-multiple-overlays',
     },
     {
-        title: ls\`Apply new filters in the Network tool\`,
-        subtitle: ls\`Filter network requests with the new 'resource-type' and 'url' keywords in the Network tool.\`,
-        link: 'https://go.microsoft.com/fwlink/?linkid=2147022',
+        title: i18nLazyString("Learn about DevTools with informative tooltips"),
+        subtitle: i18nLazyString("The DevTools Tooltips feature helps you learn about all the different tools and panes in DevTools. Toggle on with 'CTRL/CMD + SHIFT + H' and Toggle off with 'Esc'"),
+        link: 'https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/whats-new/2021/04/devtools#learn-about-devtools-with-informative-tooltips',
     },
 ],`;
diff --git a/src/host/polyfills/simpleView.ts b/src/host/polyfills/simpleView.ts
index 1a2df28..5883437 100644
--- a/src/host/polyfills/simpleView.ts
+++ b/src/host/polyfills/simpleView.ts
@@ -3,7 +3,7 @@
 import { IDevToolsWindow } from '../host';
 import { ToolsHost } from '../toolsHost';
 
-declare let InspectorFrontendHost: ToolsHost;
+declare let Host: ToolsHost;
 
 interface IRevealable {
     lineNumber: number;
@@ -18,7 +18,7 @@ const enum KeepMatchedText {
     AtEnd = 2
 }
 
-const isDrawerEnabled = '(Root.Runtime.vscodeSettings.enableNetwork || Root.Runtime.vscodeSettings.whatsNew)';
+const isDrawerEnabled = 'Root.Runtime.vscodeSettings.enableNetwork';
 
 function replaceInSourceCode(content: string, pattern: RegExp, replacementText: string, keepMatchedText?: KeepMatchedText): string | null {
     const match = pattern.exec(content);
@@ -52,13 +52,13 @@ export function revealInVSCode(revealable: IRevealable | undefined, omitFocus: b
 }
 
 export function getVscodeSettings(callback: (arg0: Record<string, unknown>) => void): void {
-    InspectorFrontendHost.getVscodeSettings(callback);
+    Host.InspectorFrontendHost.getVscodeSettings(callback);
 }
 
 export function sendToVscodeOutput(message: string): void {
-    // Since we are calling InspectorFrontendHost outside of root.js, we need to use InspectorFrontendHost.InspectorFrontendHostInstance
+    // Since we are calling InspectorFrontendHost outside of root.js, we need to use Host.InspectorFrontendHost
     // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
-    InspectorFrontendHost.InspectorFrontendHostInstance.sendToVscodeOutput(message);
+    Host.InspectorFrontendHost.sendToVscodeOutput(message);
 }
 
 export function applyExtensionSettingsInstantiatePatch(content: string): string | null {
@@ -68,11 +68,18 @@ export function applyExtensionSettingsInstantiatePatch(content: string): string
 }
 
 export function applyExtensionSettingsRuntimeObjectPatch(content: string): string | null {
-    const pattern = /experiments:\s*experiments/;
-    const replacementText = ', vscodeSettings:vscodeSettings';
+    const pattern = /__scope\.experiments\s*=\s*experiments;/;
+    const replacementText = '__scope.vscodeSettings = vscodeSettings';
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
 
+export function applyExtensionSettingExportPatch(content: string): string | null {
+    // export { Experiment, ExperimentsSupport, Runtime, experiments, loadResourcePromise, loadScriptPromise };
+    const pattern = /export { Experiment, ExperimentsSupport, Runtime, experiments, loadResourcePromise, loadScriptPromise }/;
+    const replacementText = 'export { Experiment, ExperimentsSupport, Runtime, experiments, vscodeSettings, loadResourcePromise, loadScriptPromise }';
+    return replaceInSourceCode(content, pattern, replacementText);
+}
+
 export function applyCreateExtensionSettingsLegacyPatch(content: string): string | null {
     const pattern = /Root\.Runtime\.experiments/g;
     const replacementText = 'Root.Runtime.vscodeSettings = Runtime.vscodeSettings;';
@@ -80,24 +87,28 @@ export function applyCreateExtensionSettingsLegacyPatch(content: string): string
 }
 
 export function applyPortSettingsFunctionCreationPatch(content: string): string | null {
-    const pattern = /static instance/g;
+    const pattern = /static isDescriptorEnabled/g;
     const replacementText = getVscodeSettings.toString().slice(9);
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.AtEnd);
 }
 
 export function applyPortSettingsFunctionCallPatch(content: string): string | null {
-    const pattern = /this._descriptorsMap\s*=\s*{};/g;
+    // super(descriptors);
+    const pattern = /super\(descriptors\);/g;
     const replacementText = 'this.getVscodeSettings((vscodeSettingsObject) => {Object.assign(vscodeSettings, vscodeSettingsObject);});';
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
 
 export function applyCommonRevealerPatch(content: string): string | null {
-    const pattern = /let reveal\s*=\s*function\s*\(revealable,\s*omitFocus\)\s*{/g;
-    const replacementText = `let reveal = ${revealInVSCode.toString().slice(0, -1)}`;
+    // Updates revealers to direct users to VSCode files
+    // let reveal = async function (revealable, omitFocus) {
+    const pattern = /let\s*reveal\s*=\s*async\s*function\s*\(revealable,\s*omitFocus\)\s*{/g;
+    const replacementText = `let reveal = async ${revealInVSCode.toString().slice(0, -1)}`;
     return replaceInSourceCode(content, pattern, replacementText);
 }
 
 export function applyStylesRevealerPatch(content: string): string | null {
+    // Removes a Context menu entry that opens the sources panel.
     const pattern = /this\._navigateToSource\(selectElement,\s*true\);/g;
     const replacementText = '';
     return replaceInSourceCode(content, pattern, replacementText);
@@ -105,10 +116,11 @@ export function applyStylesRevealerPatch(content: string): string | null {
 
 export function applyStylesToggleFocusPatch(content: string): string | null {
     // Patch to fix accessibility focus issue when toggling a property with context menu option.
-    const pattern = /contextMenu\.defaultSection\(\)\.appendCheckboxItem\(ls\s*`Toggle property[\s\S]+.const sectionIndex = this\._parentPane\.focusedSectionIndex\(\);/g;
+    const pattern = /contextMenu\.defaultSection\(\)\.appendCheckboxItem\(\s*.*\s*const sectionIndex = this\._parentPane\.focusedSectionIndex\(\);/g;
     const replacementText = `
         const sectionIndex = this._parentPane.focusedSectionIndex();
-        contextMenu.defaultSection().appendCheckboxItem(ls \`Toggle property and continue editing\`, async () => {
+        contextMenu.defaultSection().appendCheckboxItem(
+            i18nString(UIStrings.togglePropertyAndContinueEditing), async () => {
             ARIAUtils.alert('Toggle property and continue editing selected', this.nameElement);
     `;
     return replaceInSourceCode(content, pattern, replacementText);
@@ -116,11 +128,13 @@ export function applyStylesToggleFocusPatch(content: string): string | null {
 
 export function applyNoMatchingStylesPatch(content: string): string | null {
     // Patch to inform user to refresh/resume target to get CSS information when attaching to a paused target.
-    const pattern = /this\._noMatchesElement\.textContent\s*=\s*(ls\s*`No matching selector or style`);/g;
+    // Appears in the styles pane if no matching styles are reported by CSS domain.
+    // this._noMatchesElement.textContent = i18nString(UIStrings.noMatchingSelectorOrStyle);
+    const pattern = /this\._noMatchesElement\.textContent\s*=\s*i18nString\(UIStrings\.noMatchingSelectorOrStyle\);/g;
     const replacementText = `
-       const noMatchSelector = ls \`No matching selector or style.\`;
-       const pausedExplanation = ls \`Styles may not be available if target was paused when opening Edge DevTools.\`;
-       const resumePrompt = ls \`Please resume or refresh the target.\`;
+       const noMatchSelector = i18nString(UIStrings.noMatchingSelectorOrStyle);
+       const pausedExplanation = i18nString("Styles may not be available if target was paused when opening Edge DevTools.");
+       const resumePrompt = i18nString("Please resume or refresh the target.");
        this._noMatchesElement.innerHTML = \`\${noMatchSelector}<br />\${pausedExplanation}<br />\${resumePrompt}\`;
     `;
     return replaceInSourceCode(content, pattern, replacementText);
@@ -142,6 +156,7 @@ export function applyQueryParamsObjectPatch(content: string): string | null {
 
 export function applyCommandMenuPatch(content: string): string | null {
     // pattern intended to match logic of CommandMenu.attach()
+    // Only attaches Elements, Network, and the Show Welcome commands/actions
     const pattern = /for\s*\(const action of actions\)\s*{\s*const category\s*=\s*action[\s\S]+this\._commands\.sort\(commandComparator\);/;
     const replacementText =
         `const networkEnabled = Root.Runtime.vscodeSettings.enableNetwork;
@@ -164,7 +179,7 @@ export function applyCommandMenuPatch(content: string): string | null {
         if (networkEnabled) {
             condition = condition && command.category() !== 'Network';
         }
-        if (!condition && command.available()) {
+        if ((!condition || command.title() === 'Show Welcome') && command.available()) {
             this._commands.push(command);
         }
         }
@@ -183,28 +198,24 @@ export function applyInspectorViewShowDrawerPatch(content: string): string | nul
 
 export function applyInspectorViewCloseDrawerPatch(content: string): string | null {
     // this patch closes the drawer if the network tool is disabled
-    const pattern = /InspectorView\.InspectorView\.instance\(\)\.createToolbars\(\);/g;
-    const replacementText = `if (!${isDrawerEnabled}) {InspectorView.InspectorView.instance()._closeDrawer();}`;
+    // await InspectorView.instance().createToolbars();
+    const pattern = /await\s*InspectorView\.instance\(\)\.createToolbars\(\);/g;
+    const replacementText = `if (!${isDrawerEnabled}) {InspectorView.instance()._closeDrawer();}`;
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
 
 export function applyMainViewPatch(content: string): string | null {
+    // Removes the More tools option from the context menu on the toolbar
     const pattern = /const moreTools\s*=\s*[^;]+;/g;
     const replacementText = 'const moreTools = { defaultSection: () => ({ appendItem: () => {} }) };';
     return replaceInSourceCode(content, pattern, replacementText);
 }
 
-export function applyScreencastAppPatch(content: string): string | null {
-    // This patch fixes screencasting functionality in version 88
-    const pattern = /this\._getAppProviderInstance\('Main.SimpleAppProvider'\);/g;
-    const replacementText = 'Runtime.Runtime.instance().extension(AppProvider.AppProvider).instance();';
-    return replaceInSourceCode(content, pattern, replacementText);
-}
-
-export function applyScreencastRepaintPatch(content: string): string | null {
-    // This patch removes a condition that calls repaint to restore scroll functionality
-    const pattern = /\(this._highlightNode\)/g;
-    const replacementText = '(true)';
+export function applyExperimentsEnabledPatch(content: string): string | null {
+    // Replaces list of experiements enabled by default
+    //experiments.enableExperimentsByDefault([...]);
+    const pattern = /experiments\.enableExperimentsByDefault\(.*\);/g;
+    const replacementText = `experiments.enableExperimentsByDefault(['msEdgeDevToolsWelcomeTab', 'msEdgeTooltips']);`;
     return replaceInSourceCode(content, pattern, replacementText);
 }
 
@@ -215,16 +226,16 @@ export function applyRemoveBreakOnContextMenuItem(content: string): string | nul
 }
 
 export function applyShowDrawerTabs(content: string): string | null {
-    // Appends the Request Blocking tab or Whats New tab in the drawer even if it is not open.
+    // Appends the Request Blocking tab in the drawer even if it is not open.
     const pattern = /if\s*\(!view\.isCloseable\(\)\)/;
-    const replacementText = "if(!view.isCloseable()||id==='network.blocked-urls'||id==='release-note')";
+    const replacementText = "if(!view.isCloseable()||id==='network.blocked-urls')";
     return replaceInSourceCode(content, pattern, replacementText);
 }
 
-export function applyPersistDrawerTabs(content: string): string | null {
-    // Removes the close button from the Request blocking and Whats New tab tab by making the tab non-closeable.
+export function applyPersistTabs(content: string): string | null {
+    // Removes the close button from the Request blocking and Network tabs by making the tab non-closeable.
     const pattern = /this\._closeable\s*=\s*closeable;/;
-    const replacementText = "this._closeable= (id==='network.blocked-urls' | id === 'release-note')?false:closeable;";
+    const replacementText = "this._closeable= (id==='network.blocked-urls' || id === 'network')?false:closeable;";
     return replaceInSourceCode(content, pattern, replacementText);
 }
 
@@ -254,6 +265,7 @@ export function applyAppendTabConditionsPatch(content: string): string | null {
         'accessibility.view',
         'elements.domProperties',
         'elements.eventListeners',
+        'elements.layout',
     ];
 
     const condition = elementsTabs.map(tab => {
@@ -267,8 +279,8 @@ export function applyAppendTabConditionsPatch(content: string): string | null {
         appendTab(id, tabTitle, view, tabTooltip, userGesture, isCloseable, index) {
             let patchedCondition = ${condition};
             ${applyEnableNetworkPatch()}
-            if(Root.Runtime.vscodeSettings.whatsNew) {
-              patchedCondition = patchedCondition && (id !== "release-note");
+            if (Root.Runtime.vscodeSettings.welcome) {
+              patchedCondition = patchedCondition && (id !== "welcome");
             }
             if (!patchedCondition) {
                 this.appendTabOverride(id, tabTitle, view, tabTooltip, userGesture, isCloseable, index);
@@ -340,9 +352,9 @@ export function applyInspectorCommonCssPatch(content: string): string | null {
         hideMoreToolsBtn +
         unHideScreenCastBtn;
 
-    const pattern = /(:host-context\(\.platform-mac\)\s*\.monospace,)/g;
-    const replacementText = `${topHeaderCSS}${separator} $1`;
-    return replaceInSourceCode(content, pattern, replacementText);
+    const pattern = /\.platform-mac,/g;
+    const replacementText = `${topHeaderCSS}${separator}`;
+    return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.AtEnd);
 }
 
 export function applyInspectorCommonNetworkPatch(content: string): string | null {
@@ -370,9 +382,9 @@ export function applyInspectorCommonNetworkPatch(content: string): string | null
         hidePrettyPrintBtn +
         unHideSearchCloseButton;
 
-    const pattern = /(:host-context\(\.platform-mac\)\s*\.monospace,)/g;
-    const replacementText = `${networkCSS}${separator} $1`;
-    return replaceInSourceCode(content, pattern, replacementText);
+    const pattern = /\.platform-mac,/g;
+    const replacementText = `${networkCSS}${separator}`;
+    return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.AtEnd);
 }
 
 export function applyInspectorCommonContextMenuPatch(content: string): string | null {
@@ -389,13 +401,14 @@ export function applyInspectorCommonContextMenuPatch(content: string): string |
         .soft-context-menu-item[aria-label='Save as...'] {
             display: none !important;
         }`.replace(/\n/g, separator);
-
-    const pattern = /(:host-context\(\.platform-mac\)\s*\.monospace,)/g;
-    const replacementText = `${hideContextMenuItems}${separator} $1`;
-    return replaceInSourceCode(content, pattern, replacementText);
+        //platform-mac,\n:host-context(.platform-mac)
+    const pattern = /\.platform-mac,/g;
+    const replacementText = `${hideContextMenuItems}${separator}`;
+    return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.AtEnd);
 }
 
 export function applyInspectorCommonCssRightToolbarPatch(content: string): string | null {
+    // Hides the right toolbar that contains the feedback, settings, and more tools icons
     const pattern = /(\.tabbed-pane-right-toolbar\s*\{([^\}]*)?\})/g;
     const replacementText =
         `.tabbed-pane-right-toolbar {
@@ -405,6 +418,7 @@ export function applyInspectorCommonCssRightToolbarPatch(content: string): strin
 }
 
 export function applyInspectorCommonCssTabSliderPatch(content: string): string | null {
+    // Hides the underline indicator that is usually present under the currently active tab
     const pattern = /(\.tabbed-pane-tab-slider\s*\{([^\}]*)?\})/g;
     const replacementText =
         `.tabbed-pane-tab-slider {
@@ -414,9 +428,10 @@ export function applyInspectorCommonCssTabSliderPatch(content: string): string |
 }
 
 export function applyContextMenuRevealOption(content: string): string | null {
-    const pattern = /const destination\s*=\s*Revealer\.revealDestination\(revealable\);/;
+    // const destination = revealDestination(revealable);
+    const pattern = /const destination\s*=\s*revealDestination\(revealable\);/;
     const replacementText = `
-        let destination = Revealer.revealDestination(revealable);
+        let destination = revealDestination(revealable);
         if (destination==="Sources panel") {
             destination = "Visual Studio Code";
         };`;
@@ -431,9 +446,10 @@ export function applyMoveToContextMenuPatch(content: string): string | null {
 
 export function applyThemePatch(content: string): string | null {
     // Sets the theme of the DevTools
-    const pattern = /const settingDescriptor/;
-    const replacementText = 'const theme = Root.Runtime.vscodeSettings.theme;if(theme){themeSetting.set(theme);} const settingDescriptor';
-    return replaceInSourceCode(content, pattern, replacementText);
+    // const themeSetting = Settings.instance().createSetting('uiTheme', EDGE_DEFAULT_THEME);
+    const pattern = /const\s*themeSetting\s*=\s*Settings\.instance\(\)\.createSetting\('uiTheme',\s*EDGE_DEFAULT_THEME\);/;
+    const replacementText = 'const theme = Root.Runtime.vscodeSettings.theme;if(theme){themeSetting.set(theme);}';
+    return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
 
 export function applyRemovePreferencePatch(content: string): string | null {
@@ -443,15 +459,22 @@ export function applyRemovePreferencePatch(content: string): string | null {
     return replaceInSourceCode(content, pattern, replacementText);
 }
 
+export function applyConsoleImportPatch(content: string): string | null {
+    // import { userMetrics } from '../host/host.js';
+    const pattern = /import { userMetrics }/g;
+    const replacementText = `import { userMetrics, InspectorFrontendHost }`;
+    return replaceInSourceCode(content, pattern, replacementText);
+}
+
 export function applyRerouteConsoleMessagePatch(content: string): string | null {
-    const pattern = /this\.dispatchEventToListeners\(Events\$h\.MessageAdded,\s*msg\);/g;
+    const pattern = /this\.dispatchEventToListeners\(Events\.MessageAdded,\s*msg\);/g;
     const replacementText = `sendToVscodeOutput(msg.level + ': ' + msg.messageText); ${sendToVscodeOutput.toString()}`;
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
 
 export function applyScreencastCursorPatch(content: string): string | null {
     // This patch removes the touch cursor from the screencast view
-    const pattern = /\('div',\s*'screencast-canvas-container'\)\);/g;
+    const pattern = /\('div',\s*'screencast-canvas-container'\);/g;
     const replacementText = "this._canvasContainerElement.style.cursor = 'unset';";
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
@@ -459,7 +482,8 @@ export function applyScreencastCursorPatch(content: string): string | null {
 export function applyScreencastHeadlessPatch(content: string): string | null {
     // This patch will toggle the DevTools screencast on or off based on if the user is using headless or non-headless mode.
     // This patch also marks a time stamp if the setting is enabled.
-    const pattern = /this\._enabledSetting\s*=\s*Settings\.Settings\.instance\(\)\.createSetting\('screencastEnabled',\s*true\);/g;
+    // this._enabledSetting = Settings.instance().createSetting('screencastEnabled', true);
+    const pattern = /this\._enabledSetting\s*=\s*Settings\.instance\(\)\.createSetting\('screencastEnabled',\s*true\);/g;
     const replacementText = "const isHeadless = Root.Runtime.vscodeSettings.isHeadless; this._enabledSetting.set(isHeadless); this._startTime = isHeadless ? performance.now() : null;";
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
 }
@@ -469,13 +493,13 @@ export function applyScreencastTelemetry(content: string): string | null {
     const pattern = /const enabled\s*=\s*!this\._toggleButton\.toggled\(\);/g;
     const replacementText = `
     if (enabled) {
-        InspectorFrontendHost.InspectorFrontendHostInstance.recordEnumeratedHistogram('DevTools.ScreencastToggle', 1, 2);
+        Host.InspectorFrontendHost.recordEnumeratedHistogram('DevTools.ScreencastToggle', 1, 2);
         this._startTime = performance.now();
     } else {
-        InspectorFrontendHost.InspectorFrontendHostInstance.recordEnumeratedHistogram('DevTools.ScreencastToggle', 0, 2);
+        Host.InspectorFrontendHost.recordEnumeratedHistogram('DevTools.ScreencastToggle', 0, 2);
         if (this._startTime) {
             const sessionDuration = performance.now() - this._startTime;
-            InspectorFrontendHost.InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.ScreencastDuration', sessionDuration);
+            Host.InspectorFrontendHost.recordPerformanceHistogram('DevTools.ScreencastDuration', sessionDuration);
         }
     }`;
     return replaceInSourceCode(content, pattern, replacementText, KeepMatchedText.InFront);
diff --git a/src/host/polyfills/textSelection.ts b/src/host/polyfills/textSelection.ts
index d5d5a6a..7501f15 100644
--- a/src/host/polyfills/textSelection.ts
+++ b/src/host/polyfills/textSelection.ts
@@ -1,6 +1,8 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 
+// Overrides a weird text selection hack in the elements panel not needed in VSCode
+// Confirm it works by selecting text in the elements DOM tree and styles sidebar
 export function applySetupTextSelectionPatch(content: string): string | null {
     const pattern = /_setupTextSelectionHack\(stylePaneWrapperElement\)\s*{/g;
     if (content.match(pattern)) {
diff --git a/src/host/toolsHost.ts b/src/host/toolsHost.ts
index 95f42dc..c7e9d76 100644
--- a/src/host/toolsHost.ts
+++ b/src/host/toolsHost.ts
@@ -16,7 +16,7 @@ import { vscode } from './host';
 export class ToolsHost {
     // We need to add a dummy property to get around build errors for sendToVscodeOutput.
     // eslint-disable-next-line @typescript-eslint/no-explicit-any
-    InspectorFrontendHostInstance: any;
+    InspectorFrontendHost: any;
     private resourceLoader: Readonly<ToolsResourceLoader> | undefined;
     private getHostCallbacksNextId = 0;
     private getHostCallbacks: Map<number, (preferences: Record<string, unknown>) => void> =
@@ -160,7 +160,7 @@ export class ToolsHost {
         this.fireGetHostCallback(id, {
             enableNetwork: vscodeObject.enableNetwork,
             theme,
-            whatsNew: vscodeObject.whatsNew,
+            welcome: vscodeObject.welcome,
             isHeadless: vscodeObject.isHeadless,
         });
     }


Test patch:
diff --git a/test/devtoolsPanel.test.ts b/test/devtoolsPanel.test.ts
index 15b2df0..809c289 100644
--- a/test/devtoolsPanel.test.ts
+++ b/test/devtoolsPanel.test.ts
@@ -494,7 +494,7 @@ describe("devtoolsPanel", () => {
 
             it("calls getVscodeSettings", async () => {
                 const expectedId = { id: 0 };
-                const expectedState = { enableNetwork: true, themeString: "System preference", whatsNew: true, isHeadless: false};
+                const expectedState = { enableNetwork: true, themeString: "System preference", welcome: true, isHeadless: false};
                 (context.workspaceState.get as jest.Mock).mockReturnValue(expectedState);
 
                 const dtp = await import("../src/devtoolsPanel");
@@ -507,7 +507,7 @@ describe("devtoolsPanel", () => {
                     {
                         themeString: expectedState.themeString,
                         enableNetwork: expectedState.enableNetwork,
-                        whatsNew: expectedState.whatsNew,
+                        welcome: expectedState.welcome,
                         isHeadless: expectedState.isHeadless,
                         id: expectedId.id,
                     },
diff --git a/test/helpers/helpers.ts b/test/helpers/helpers.ts
index 9aa7b33..ceabac5 100644
--- a/test/helpers/helpers.ts
+++ b/test/helpers/helpers.ts
@@ -78,7 +78,7 @@ export function createFakeVSCode() {
                                 return true;
                             case "themes":
                                 return "System preference";
-                            case "whatsNew":
+                            case "welcome":
                                 return true;
                             case "isHeadless":
                                 return false;
@@ -92,7 +92,7 @@ export function createFakeVSCode() {
                                 return {defaultValue: true};
                             case "themes":
                                 return {defaultValue: "Light"};
-                            case "whatsNew":
+                            case "welcome":
                                 return {defaultValue: false};
                             case "isHeadless":
                                 return {defaultValue: false};
diff --git a/test/host/polyfills/cssPaddingInline.test.ts b/test/host/polyfills/cssPaddingInline.test.ts
deleted file mode 100644
index c49f3d9..0000000
--- a/test/host/polyfills/cssPaddingInline.test.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-import { testPatch } from "../../helpers/helpers";
-import { applyPaddingInlineCssPatch } from "../../../src/host/polyfills/cssPaddingInline";
-
-describe("cssPaddingInline", () => {
-    it("applyPaddingInlineCssPatch correctly changes elements-disclosure text", async () => {
-        const filePath = "elements/elements_module.js";
-        const expectedStrings =
-        [".elements-disclosure .gutter-container {\\n        display: none !important;\\n    }"];
-
-        testPatch(filePath, applyPaddingInlineCssPatch, expectedStrings);
-    });
-
-    it("applyPaddingInlineCssPatch correctly changes padding-inline-start text", async () => {
-        const filePath = "elements/elements_module.js";
-        const expectedStrings = ["webkit-padding-start"];
-
-        testPatch(filePath, applyPaddingInlineCssPatch, expectedStrings);
-    });
-
-    it("applyPaddingInlineCssPatch ignores other text", async () => {
-        const sampleText = "body { scroll-padding-inline-start: 10px; }";
-        const result = applyPaddingInlineCssPatch(sampleText);
-        expect(result).toEqual(null);
-    });
-});
diff --git a/test/host/polyfills/releaseNote.test.ts b/test/host/polyfills/releaseNote.test.ts
index 310ec27..dbae02f 100644
--- a/test/host/polyfills/releaseNote.test.ts
+++ b/test/host/polyfills/releaseNote.test.ts
@@ -1,44 +1,36 @@
 // Copyright (c) Microsoft Corporation. All rights reserved.
 // Licensed under the MIT License.
 
-import { getTextFromFile } from "../../helpers/helpers";
+import { testPatch } from "../../helpers/helpers";
 import * as ReleaseNotePatch from "../../../src/host/polyfills/releaseNote";
 
 describe("Release notes text replacement", () => {
     it("verifies that applyReleaseNotePatch correctly replaces what's new content", async () => {
-        const filePath = "help/help.js";
-        const fileContents = getTextFromFile(filePath);
-        if (!fileContents) {
-            throw new Error(`Could not find file: ${filePath}`);
-        }
+        const filePath = "panels/help/ReleaseNoteText.js";
+        const patch = ReleaseNotePatch.applyReleaseNotePatch;
+        const expectedStrings = ["Highlights from the latest version of Microsoft Edge Developer Tools for Visual Studio Code"];
 
-        const result = ReleaseNotePatch.applyReleaseNotePatch(fileContents);
-        expect(result).toEqual(
-            expect.stringContaining(
-                `Highlights from the latest version of Microsoft Edge Developer Tools for Visual Studio Code`));
+        await testPatch(filePath, patch, expectedStrings);
     });
-    it("verifies that applyGithubLinksPatch correctly replaces GitHub links at the bottom of the tab", async () => {
-        const filePath = "help/help.js";
-        const fileContents = getTextFromFile(filePath);
-        if (!fileContents) {
-            throw new Error(`Could not find file: ${filePath}`);
-        }
+    it("verifies that applyAnnouncementNamePatch correctly replaces the section headers", async () => {
+        const filePath = "welcome/WelcomePanel.js";
+        const patch = ReleaseNotePatch.applyAnnouncementNamePatch;
+        const expectedStrings = ["New in Developer Tools"];
 
-        const result = ReleaseNotePatch.applyGithubLinksPatch(fileContents);
-        expect(result).toEqual(
-            expect.stringContaining(
-                `const githubLink`));
+        await testPatch(filePath, patch, expectedStrings);
     });
-    it("verifies that applyAnnouncementNamePatch correctly replaces the section headers", async () => {
-        const filePath = "help/help.js";
-        const fileContents = getTextFromFile(filePath);
-        if (!fileContents) {
-            throw new Error(`Could not find file: ${filePath}`);
-        }
+    it("verifies that applyShowMorePatch correctly replaces the section headers", async () => {
+        const filePath = "welcome/WhatsNewList.js";
+        const patch = ReleaseNotePatch.applyShowMorePatch;
+        const unexpectedStrings = ["href=\"\""];
+
+        await testPatch(filePath, patch, undefined, unexpectedStrings);
+    });
+    it("verifies that applySettingsCheckboxPatch correctly replaces the section headers", async () => {
+        const filePath = "welcome/WelcomePanel.js";
+        const patch = ReleaseNotePatch.applySettingsCheckboxPatch;
+        const unexpectedStrings = ["titleContainer.appendChild(this.startupCheckBox);"];
 
-        const result = ReleaseNotePatch.applyAnnouncementNamePatch(fileContents);
-        expect(result).toEqual(
-            expect.stringContaining(
-                `New extension features`));
+        await testPatch(filePath, patch, undefined, unexpectedStrings);
     });
 });
diff --git a/test/host/polyfills/runtime.test.ts b/test/host/polyfills/runtime.test.ts
index fcfe870..9e7a3e8 100644
--- a/test/host/polyfills/runtime.test.ts
+++ b/test/host/polyfills/runtime.test.ts
@@ -5,7 +5,7 @@ import { applyRuntimeImportScriptPathPrefixPatch } from "../../../src/host/polyf
 
 describe("importScriptPathPrefix replacement", () => {
     it("verifies that importScriptPathPrefix is exposed as a module variable", async () => {
-        const filePath = "root/root.js";
+        const filePath = "core/root/Runtime_edge.js";
         const expectedStrings = ["self.importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();"];
         const unexpectedStrings = ["let importScriptPathPrefix"]
 
diff --git a/test/host/polyfills/simpleView.test.ts b/test/host/polyfills/simpleView.test.ts
index 1048e9d..c36d072 100644
--- a/test/host/polyfills/simpleView.test.ts
+++ b/test/host/polyfills/simpleView.test.ts
@@ -24,15 +24,15 @@ describe("simpleView", () => {
     });
 
     it("applyCommonRevealerPatch correctly changes text", async () => {
-        const filePath = "common/common.js";
+        const filePath = "core/common/Revealer.js";
         const patch = SimpleView.applyCommonRevealerPatch;
-        const expectedStrings = ["let reveal = function revealInVSCode(revealable, omitFocus) {"];
+        const expectedStrings = ["let reveal = async function revealInVSCode(revealable, omitFocus) {"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
 
     it("applyQuickOpenPatch correctly changes handleAction text for Quick Open", async () => {
-        const filePath = "quick_open/quick_open.js";
+        const filePath = "quick_open/QuickOpen.js";
         const patch = SimpleView.applyQuickOpenPatch;
         const expectedStrings = ["handleAction(context, actionId) { actionId = null; switch(actionId)"];
 
@@ -40,7 +40,7 @@ describe("simpleView", () => {
     });
 
     it("applyQueryParamsObjectPatch correctly changes handleAction text for Quick Open", async () => {
-        const filePath = "root/root.js";
+        const filePath = "core/root/Runtime_edge.js";
         const patch = SimpleView.applyQueryParamsObjectPatch;
         const expectedStrings = ["?ws=trueD&experiments=true&edgeThemes=true"];
 
@@ -48,7 +48,7 @@ describe("simpleView", () => {
     });
 
     it("applyCommandMenuPatch correctly changes attach text for command menu", async () => {
-        const filePath = "quick_open/quick_open.js";
+        const filePath = "quick_open/CommandMenu_edge.js";
         const patch = SimpleView.applyCommandMenuPatch;
         const expectedStrings = ["Root.Runtime.vscodeSettings.enableNetwork;"];
 
@@ -56,47 +56,39 @@ describe("simpleView", () => {
     });
 
     it("applyInspectorViewShowDrawerPatch correctly changes _showDrawer text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/InspectorView_edge.js";
         const patch = SimpleView.applyInspectorViewShowDrawerPatch;
-        const expectedStrings = ["if (!(Root.Runtime.vscodeSettings.enableNetwork || Root.Runtime.vscodeSettings.whatsNew)) {return false;}"];
+        const expectedStrings = ["if (!Root.Runtime.vscodeSettings.enableNetwork) {return false;}"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
 
     it("applyInspectorViewCloseDrawerPatch correctly changes _showAppUI text", async () => {
-        const filePath = "main/main.js";
+        const filePath = "main/MainImpl.js";
         const patch = SimpleView.applyInspectorViewCloseDrawerPatch;
-        const expectedStrings = ["InspectorView.InspectorView.instance()._closeDrawer();"];
+        const expectedStrings = ["InspectorView.instance()._closeDrawer();"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
 
     it("applyMainViewPatch correctly changes text", async () => {
-        const filePath = "main/main.js";
+        const filePath = "main/MainImpl.js";
         const patch = SimpleView.applyMainViewPatch;
         const expectedStrings = ["const moreTools = { defaultSection: () => ({ appendItem: () => {} }) };"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
 
-    it("applyScreencastAppPatch correctly changes text", async () => {
-        const filePath = "main/main.js";
-        const patch = SimpleView.applyScreencastAppPatch;
-        const expectedStrings = ["Runtime.Runtime.instance().extension(AppProvider.AppProvider).instance();"];
+    it("applyExperimentsEnabledPatch correctly changes text", async () => {
+        const filePath = "main/MainImpl.js";
+        const patch = SimpleView.applyExperimentsEnabledPatch;
+        const expectedStrings = ["experiments.enableExperimentsByDefault(['msEdgeDevToolsWelcomeTab', 'msEdgeTooltips']);"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
 
-    it("applyScreencastRepaintPatch correctly changes text", async () => {
-        const filePath = "screencast/screencast.js";
-        const patch = SimpleView.applyScreencastRepaintPatch;
-        const unexpectedStrings = ["(this._highlightNode)"];
-
-        await testPatch(filePath, patch, [], unexpectedStrings);
-    });
-
     it("applyDrawerTabLocationPatch correctly changes text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/InspectorView_edge.js";
         const patch = SimpleView.applyDrawerTabLocationPatch;
         const expectedStrings = ["this._showDrawer.bind(this, false), 'drawer-view', true, true, 'network.blocked-urls'"];
 
@@ -104,7 +96,7 @@ describe("simpleView", () => {
     });
 
     it("applySetTabIconPatch correctly changes text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/TabbedPane.js";
         const patch = SimpleView.applySetTabIconPatch;
         const expectedStrings = ["if(!tab){return;}"];
 
@@ -112,7 +104,7 @@ describe("simpleView", () => {
     });
 
     it("applyAppendTabOverridePatch correctly changes text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/TabbedPane.js";
         const patch = SimpleView.applyAppendTabOverridePatch;
         const expectedStrings = ["appendTabOverride(id, tabTitle, view, tabTooltip, userGesture, isCloseable, index) {"];
 
@@ -120,7 +112,7 @@ describe("simpleView", () => {
     });
 
     it("applyAppendTabConditionsPatch correctly changes text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/TabbedPane.js";
         const patch = SimpleView.applyAppendTabConditionsPatch;
         const expectedStrings = ["if (!patchedCondition) {"];
 
@@ -128,7 +120,7 @@ describe("simpleView", () => {
     });
 
     it("applyRemoveBreakOnContextMenuItem correctly changes text", async () => {
-        const filePath = "browser_debugger/browser_debugger.js";
+        const filePath = "panels/browser_debugger/DOMBreakpointsSidebarPane.js";
         const patch = SimpleView.applyRemoveBreakOnContextMenuItem;
         const unexpectedStrings = ["const breakpointsMenu"];
 
@@ -136,17 +128,17 @@ describe("simpleView", () => {
     });
 
     it("applyShowDrawerTabs correctly changes text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/ViewManager.js";
         const patch = SimpleView.applyShowDrawerTabs;
-        const expectedStrings = ["if(!view.isCloseable()||id==='network.blocked-urls'||id==='release-note')"];
+        const expectedStrings = ["if(!view.isCloseable()||id==='network.blocked-urls')"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
 
-    it("applyPersistDrawerTabs correctly changes text", async () => {
-        const filePath = "ui/ui.js";
-        const patch = SimpleView.applyPersistDrawerTabs;
-        const expectedStrings = ["this._closeable= (id==='network.blocked-urls' | id === 'release-note')?false:closeable;"];
+    it("applyPersistTabs correctly changes text", async () => {
+        const filePath = "ui/legacy/TabbedPane.js";
+        const patch = SimpleView.applyPersistTabs;
+        const expectedStrings = ["this._closeable= (id==='network.blocked-urls' || id === 'network')?false:closeable;"];
 
         await testPatch(filePath, patch, expectedStrings);
     });
@@ -192,7 +184,7 @@ describe("simpleView", () => {
     });
 
     it("applyContextMenuRevealOption correctly changes text", async () => {
-        const filePath = "components/components.js";
+        const filePath = "components/Linkifier.js";
         const patch = SimpleView.applyContextMenuRevealOption;
         const expectedStrings = ['destination = "Visual Studio Code"'];
 
@@ -200,7 +192,7 @@ describe("simpleView", () => {
     });
 
     it("applyMoveToContextMenuPatch correctly changes text", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/InspectorView.js";
         const patch = SimpleView.applyMoveToContextMenuPatch;
         const expectedStrings = ['const locationName = ViewManager.instance().locationNameForViewId(tabId);return;'];
 
@@ -208,7 +200,7 @@ describe("simpleView", () => {
     });
 
     it("applyThemePatch correctly modifies themes to use theme parameter", async () => {
-        const filePath = "themes/themes.js";
+        const filePath = "themes/ThemesImpl.js";
         const patch = SimpleView.applyThemePatch;
         const expectedStrings = ["Root.Runtime.vscodeSettings.theme;"];
 
@@ -216,7 +208,7 @@ describe("simpleView", () => {
     });
 
     it("applyDefaultTabPatch correctly modifies text to prevent usage of TabbedLocation._defaultTab", async () => {
-        const filePath = "ui/ui.js";
+        const filePath = "ui/legacy/ViewManager.js";
         const patch = SimpleView.applyDefaultTabPatch;
         const expectedStrings = ["this._defaultTab=undefined;"];
 
@@ -224,7 +216,7 @@ describe("simpleView", () => {
     });
 
     it("applyRemovePreferencePatch correctly modifes host.js to ignore localStorage deletion", async () => {
-        const filePath = "host/host.js";
+        const filePath = "core/host/InspectorFrontendHost.js";
         const patch = SimpleView.applyRemovePreferencePatch;
         const expectedStrings = ["removePreference(name){return;}"];
 
@@ -232,7 +224,7 @@ describe("simpleView", () => {
     });
 
     it("applyExtensionSettingsInstantiatePatch correctly changes root.js to include extensionSettings global const", async () => {
-        const filePath = "root/root.js";
+        const filePath = "core/root/Runtime.js";
         const patch = SimpleView.applyExtensionSettingsInstantiatePatch;
         const expectedStrings = ["const vscodeSettings={}"];
 
@@ -240,15 +232,15 @@ describe("simpleView", () => {
     });
 
     it("applyExtensionSettingsRuntimeObjectPatch correctly changes RuntimeObject to include extensionSettings global const", async () => {
-        const filePath = "root/root.js";
+        const filePath = "core/root/Runtime.js";
         const patch = SimpleView.applyExtensionSettingsRuntimeObjectPatch;
-        const expectedStrings = ["vscodeSettings:vscodeSettings"];
+        const expectedStrings = ["__scope.vscodeSettings = vscodeSettings"];
 
         testPatch(filePath, patch, expectedStrings);
     });
 
     it("applyCreateExtensionSettingsLegacyPatch correctly changes root-legacy.js to include extensionSettings glbal const", async () => {
-        const filePath = "root/root-legacy.js";
+        const filePath = "core/root/root-legacy.js";
         const patch = SimpleView.applyCreateExtensionSettingsLegacyPatch;
         const expectedStrings = ["Root.Runtime.vscodeSettings = Runtime.vscodeSettings"];
 
@@ -256,7 +248,7 @@ describe("simpleView", () => {
     });
 
     it("applyPortSettingsFunctionCreationPatch correctly changes root.js to create settings function", async () => {
-        const filePath = "root/root.js";
+        const filePath = "core/root/Runtime.js";
         const patch = SimpleView.applyPortSettingsFunctionCreationPatch;
         const expectedStrings = ["InspectorFrontendHost.getVscodeSettings(callback);"];
 
@@ -264,7 +256,7 @@ describe("simpleView", () => {
     });
 
     it("applyPortSettingsFunctionCallPatch correctly changes root.js to call settings function", async () => {
-        const filePath = "root/root.js";
+        const filePath = "core/root/Runtime.js";
         const patch = SimpleView.applyPortSettingsFunctionCallPatch;
         const expectedStrings = ["this.getVscodeSettings"];
 
@@ -272,7 +264,7 @@ describe("simpleView", () => {
     });
 
     it("applyStylesRevealerPatch correctly changes root.js to set extensionSettings map", async () => {
-        const filePath = "elements/elements.js";
+        const filePath = "panels/elements/StylePropertyTreeElement.js";
         const patch = SimpleView.applyStylesRevealerPatch;
         const unexpectedStrings = ["this._navigateToSource(selectElement, true);"];
 
@@ -280,7 +272,7 @@ describe("simpleView", () => {
     });
 
     it("applyStylesToggleFocusPatch correctly changes root.js to set extensionSettings map", async () => {
-        const filePath = "elements/elements.js";
+        const filePath = "panels/elements/StylePropertyTreeElement.js";
         const patch = SimpleView.applyStylesToggleFocusPatch;
         const expectedStrings = ["ARIAUtils.alert('Toggle property and continue editing selected', this.nameElement);"];
 
@@ -288,20 +280,20 @@ describe("simpleView", () => {
     });
 
     it("applyNoMatchingStylesPatch correctly changes elements.js to set No Matching Styles message", async () => {
-        const filePath = "elements/elements.js";
+        const filePath = "panels/elements/StylesSidebarPane_edge.js";
         const patch = SimpleView.applyNoMatchingStylesPatch;
         const expectedStrings = [
-            `const noMatchSelector = ls \`No matching selector or style.\`;`,
-            `const pausedExplanation = ls \`Styles may not be available if target was paused when opening Edge DevTools.\`;`,
-            `const resumePrompt = ls \`Please resume or refresh the target.\`;`,
-            `this._noMatchesElement.innerHTML = \`\${noMatchSelector}<br />\${pausedExplanation}<br />\${resumePrompt}\`;`,
+            `const noMatchSelector = i18nString(UIStrings.noMatchingSelectorOrStyle);`,
+            `const pausedExplanation = i18nString("Styles may not be available if target was paused when opening Edge DevTools.");`,
+            `const resumePrompt = i18nString("Please resume or refresh the target.");`,
+            `this._noMatchesElement.innerHTML = \`\${noMatchSelector}<br />\${pausedExplanation}<br />\${resumePrompt}\`;`
         ];
 
         testPatch(filePath, patch, expectedStrings);
     });
 
     it("applyRerouteConsoleMessagePatch correctly changes root.js to set extensionSettings map", async () => {
-        const filePath = "sdk/sdk.js";
+        const filePath = "core/sdk/ConsoleModel.js";
         const patch = SimpleView.applyRerouteConsoleMessagePatch;
         const expectedStrings = ["sendToVscodeOutput"];
 
@@ -309,7 +301,7 @@ describe("simpleView", () => {
     });
 
     it("applyScreencastCursorPatch correctly changes screencast.js text to remove touch cursor", async () => {
-        const filePath = "screencast/screencast.js";
+        const filePath = "screencast/ScreencastView.js";
         const patch = SimpleView.applyScreencastCursorPatch;
         const expectedStrings = ["this._canvasContainerElement.style.cursor = 'unset';"];
 
@@ -317,7 +309,7 @@ describe("simpleView", () => {
     });
 
     it("applyScreencastHeadlessPatch correctly replaces screencast.js text to toggle screencast based on headless settings", async () => {
-        const filePath = "screencast/screencast.js";
+        const filePath = "screencast/ScreencastApp.js";
         const patch = SimpleView.applyScreencastHeadlessPatch;
         const expectedStrings = ["const isHeadless = Root.Runtime.vscodeSettings.isHeadless;"];
 
@@ -325,7 +317,7 @@ describe("simpleView", () => {
     });
 
     it("applyScreencastTelemetry correctly changes screencast.js text to implement screencast telemetry", async () => {
-        const filePath = "screencast/screencast.js";
+        const filePath = "screencast/ScreencastApp.js";
         const patch = SimpleView.applyScreencastTelemetry;
         const expectedStrings = ["DevTools.ScreencastToggle", "DevTools.ScreencastDuration"];
 
diff --git a/test/host/polyfills/textSelection.test.ts b/test/host/polyfills/textSelection.test.ts
index 9b1ff17..92ad89f 100644
--- a/test/host/polyfills/textSelection.test.ts
+++ b/test/host/polyfills/textSelection.test.ts
@@ -5,7 +5,7 @@ import { applySetupTextSelectionPatch } from "../../../src/host/polyfills/textSe
 
 describe("textSelection", () => {
     it("applySetupTextSelectionPatch correctly changes text", async () => {
-        const filePath = "elements/elements.js";
+        const filePath = "panels/elements/ElementsPanel.js";
         const expectedStrings = ["_setupTextSelectionHack() { return;"];
         testPatch(filePath, applySetupTextSelectionPatch, expectedStrings);
     });
diff --git a/test/host/polyfills/thirdPartyI18n.test.ts b/test/host/polyfills/thirdPartyI18n.test.ts
index de2ff25..dd70dee 100644
--- a/test/host/polyfills/thirdPartyI18n.test.ts
+++ b/test/host/polyfills/thirdPartyI18n.test.ts
@@ -5,7 +5,7 @@ import { applyThirdPartyI18nLocalesPatch } from "../../../src/host/polyfills/thi
 
 describe("override i18n locales", () => {
     it("applyThirdPartyI18nLocalesPatch correctly changes text", async () => {
-        const filePath = "i18n/i18n.js";
+        const filePath = "third_party/i18n/i18n-bundle.js";
         const expectedStrings = ["const locales = {'en-US': {'title': 'value'},};"];
         testPatch(filePath, applyThirdPartyI18nLocalesPatch, expectedStrings);
     });
diff --git a/test/utils.test.ts b/test/utils.test.ts
index 56b8be1..a231900 100644
--- a/test/utils.test.ts
+++ b/test/utils.test.ts
@@ -997,7 +997,7 @@ describe("utils", () => {
                     fillerPropertyOne: 'Need to add filler values since the extension related telemetry functions removes the first 4 entries to create an array of extension settings',
                     fillerPropertyTwo: 'The first 4 entries for a workspaceConfiguration object are class related functions, the rest are all extension related settings.',
                     themes: 'System preference',
-                    whatsNew: 'true',
+                    welcome: 'true',
                     enableNetwork: 'false',
                 }
             });
@@ -1009,7 +1009,7 @@ describe("utils", () => {
         it('correctly records all changed extension settings', async () => {
             const reporter = createFakeTelemetryReporter();
             utils.reportExtensionSettings(reporter);
-            expect(reporter.sendTelemetryEvent).toBeCalledWith('user/settingsChangedAtLaunch', { themes: 'System preference', whatsNew: 'true', enableNetwork: 'false' });
+            expect(reporter.sendTelemetryEvent).toBeCalledWith('user/settingsChangedAtLaunch', { themes: 'System preference', welcome: 'true', enableNetwork: 'false' });
         });
 
         it('correctly sends telemetry event for changed event', async () => {