diff --git a/src/vs/platform/browserView/common/browserView.ts b/src/vs/platform/browserView/common/browserView.ts index 43bcb59d6c6..499b0ef5cb9 100644 --- a/src/vs/platform/browserView/common/browserView.ts +++ b/src/vs/platform/browserView/common/browserView.ts @@ -204,8 +204,9 @@ export interface IBrowserViewService { /** * Reload the current page * @param id The browser view identifier + * @param hard Whether to do a hard reload (bypassing cache) */ - reload(id: string): Promise; + reload(id: string, hard?: boolean): Promise; /** * Toggle developer tools for the browser view. diff --git a/src/vs/platform/browserView/electron-main/browserView.ts b/src/vs/platform/browserView/electron-main/browserView.ts index ec0c2fb6b89..11f6f39b592 100644 --- a/src/vs/platform/browserView/electron-main/browserView.ts +++ b/src/vs/platform/browserView/electron-main/browserView.ts @@ -445,8 +445,12 @@ export class BrowserView extends Disposable implements ICDPTarget { /** * Reload the current page */ - reload(): void { - this._view.webContents.reload(); + reload(hard?: boolean): void { + if (hard) { + this._view.webContents.reloadIgnoringCache(); + } else { + this._view.webContents.reload(); + } } /** diff --git a/src/vs/platform/browserView/electron-main/browserViewMainService.ts b/src/vs/platform/browserView/electron-main/browserViewMainService.ts index 0e28a487e6a..3959717fb1d 100644 --- a/src/vs/platform/browserView/electron-main/browserViewMainService.ts +++ b/src/vs/platform/browserView/electron-main/browserViewMainService.ts @@ -310,8 +310,8 @@ export class BrowserViewMainService extends Disposable implements IBrowserViewMa return this._getBrowserView(id).goForward(); } - async reload(id: string): Promise { - return this._getBrowserView(id).reload(); + async reload(id: string, hard?: boolean): Promise { + return this._getBrowserView(id).reload(hard); } async toggleDevTools(id: string): Promise { diff --git a/src/vs/workbench/contrib/browserView/common/browserView.ts b/src/vs/workbench/contrib/browserView/common/browserView.ts index 7654a648a75..743993c796f 100644 --- a/src/vs/workbench/contrib/browserView/common/browserView.ts +++ b/src/vs/workbench/contrib/browserView/common/browserView.ts @@ -138,7 +138,7 @@ export interface IBrowserViewModel extends IDisposable { loadURL(url: string): Promise; goBack(): Promise; goForward(): Promise; - reload(): Promise; + reload(hard?: boolean): Promise; toggleDevTools(): Promise; captureScreenshot(options?: IBrowserViewCaptureScreenshotOptions): Promise; dispatchKeyEvent(keyEvent: IBrowserViewKeyDownEvent): Promise; @@ -353,9 +353,9 @@ export class BrowserViewModel extends Disposable implements IBrowserViewModel { return this.browserViewService.goForward(this.id); } - async reload(): Promise { + async reload(hard?: boolean): Promise { this.logNavigationTelemetry('reload', this._url); - return this.browserViewService.reload(this.id); + return this.browserViewService.reload(this.id, hard); } async toggleDevTools(): Promise { diff --git a/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts b/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts index 364df91d6f2..1a551c6c31c 100644 --- a/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts +++ b/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts @@ -705,8 +705,8 @@ export class BrowserEditor extends EditorPane { return this._model?.goForward(); } - async reload(): Promise { - return this._model?.reload(); + async reload(hard?: boolean): Promise { + return this._model?.reload(hard); } async toggleDevTools(): Promise { diff --git a/src/vs/workbench/contrib/browserView/electron-browser/browserViewActions.ts b/src/vs/workbench/contrib/browserView/electron-browser/browserViewActions.ts index ac71ea74bf6..b32e1c70ea2 100644 --- a/src/vs/workbench/contrib/browserView/electron-browser/browserViewActions.ts +++ b/src/vs/workbench/contrib/browserView/electron-browser/browserViewActions.ts @@ -175,6 +175,11 @@ class ReloadAction extends Action2 { id: MenuId.BrowserNavigationToolbar, group: 'navigation', order: 3, + alt: { + id: HardReloadAction.ID, + title: localize2('browser.hardReloadAction', 'Hard Reload'), + icon: Codicon.refresh, + } }, keybinding: { when: CONTEXT_BROWSER_FOCUSED, @@ -193,6 +198,34 @@ class ReloadAction extends Action2 { } } +class HardReloadAction extends Action2 { + static readonly ID = 'workbench.action.browser.hardReload'; + + constructor() { + super({ + id: HardReloadAction.ID, + title: localize2('browser.hardReloadAction', 'Hard Reload'), + category: BrowserCategory, + icon: Codicon.refresh, + f1: true, + precondition: BROWSER_EDITOR_ACTIVE, + keybinding: { + when: CONTEXT_BROWSER_FOCUSED, + weight: KeybindingWeight.WorkbenchContrib + 75, // Priority over debug and reload workbench + primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyR, + secondary: [KeyMod.CtrlCmd | KeyCode.F5], + mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyR, secondary: [] } + } + }); + } + + async run(accessor: ServicesAccessor, browserEditor = accessor.get(IEditorService).activeEditorPane): Promise { + if (browserEditor instanceof BrowserEditor) { + await browserEditor.reload(true); + } + } +} + class FocusUrlInputAction extends Action2 { static readonly ID = 'workbench.action.browser.focusUrlInput'; @@ -574,6 +607,7 @@ registerAction2(NewTabAction); registerAction2(GoBackAction); registerAction2(GoForwardAction); registerAction2(ReloadAction); +registerAction2(HardReloadAction); registerAction2(FocusUrlInputAction); registerAction2(AddElementToChatAction); registerAction2(AddConsoleLogsToChatAction);