show notebook as trusted when it belongs to a trusted book (#15093)

* check for trusted books

* don't add to trustedNotebooksMomento

* update comment

* added comments

* remove empty line
This commit is contained in:
Maddy
2021-04-15 10:30:51 -07:00
committed by GitHub
parent 4edbd6f3e7
commit bec1916c62
7 changed files with 26 additions and 5 deletions

View File

@@ -117,6 +117,7 @@ suite('CellToolbarActions', function (): void {
undefined,
undefined,
undefined,
undefined,
);
instantiationService.stub(INotificationService, new TestNotificationService());
instantiationService.stub(INotebookService, notebookService);

View File

@@ -71,6 +71,7 @@ suite('MarkdownTextTransformer', () => {
undefined,
undefined,
undefined,
undefined,
);
mockNotebookService = TypeMoq.Mock.ofInstance(notebookService);

View File

@@ -701,6 +701,7 @@ function setupServices(arg: { workbenchThemeService?: WorkbenchThemeService, ins
undefined,
undefined,
undefined,
undefined,
);
instantiationService.stub(INotebookService, notebookService);

View File

@@ -33,6 +33,8 @@ import { IProductService } from 'vs/platform/product/common/productService';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { TestConfigurationService } from 'sql/platform/connection/test/common/testConfigurationService';
/**
* class to mock azdata.nb.ServerManager object
@@ -120,6 +122,7 @@ suite.skip('NotebookService:', function (): void {
didInstallExtensionEmitter: Emitter<DidInstallExtensionEvent>,
uninstallExtensionEmitter: Emitter<IExtensionIdentifier>,
didUninstallExtensionEmitter: Emitter<DidUninstallExtensionEvent>;
let configurationService: IConfigurationService;
setup(() => {
testNo++;
@@ -143,6 +146,7 @@ suite.skip('NotebookService:', function (): void {
didInstallExtensionEmitter = new Emitter<DidInstallExtensionEvent>();
uninstallExtensionEmitter = new Emitter<IExtensionIdentifier>();
didUninstallExtensionEmitter = new Emitter<DidUninstallExtensionEvent>();
configurationService = new TestConfigurationService();
instantiationService.stub(IExtensionManagementService, ExtensionManagementService);
instantiationService.stub(IExtensionManagementService, 'onInstallExtension', installExtensionEmitter.event);
@@ -159,7 +163,7 @@ suite.skip('NotebookService:', function (): void {
notebookService = new NotebookService(lifecycleService, storageService, extensionServiceMock.object, extensionManagementService,
instantiationService, fileService, logServiceMock.object, queryManagementService, contextService, productService,
editorService, untitledTextEditorService, editorGroupsService);
editorService, untitledTextEditorService, editorGroupsService, configurationService);
sandbox = sinon.sandbox.create();
});
@@ -457,7 +461,7 @@ suite.skip('NotebookService:', function (): void {
};
errorHandler.setUnexpectedErrorHandler(onUnexpectedErrorVerifier);
// The following call throws an exception internally with queryManagementService parameter being undefined.
new NotebookService(lifecycleService, storageService, extensionService, extensionManagementService, instantiationService, fileService, logService, /* queryManagementService */ undefined, contextService, productService, editorService, untitledTextEditorService, editorGroupsService);
new NotebookService(lifecycleService, storageService, extensionService, extensionManagementService, instantiationService, fileService, logService, /* queryManagementService */ undefined, contextService, productService, editorService, untitledTextEditorService, editorGroupsService, configurationService);
await unexpectedErrorPromise;
assert.strictEqual(unexpectedErrorCalled, true, `onUnexpectedError must be have been raised when queryManagementService is undefined when calling NotebookService constructor`);
});

View File

@@ -121,6 +121,7 @@ suite('Notebook Editor Model', function (): void {
undefined,
undefined,
undefined,
undefined,
);
let mockNotebookService = TypeMoq.Mock.ofInstance(notebookService);

View File

@@ -51,6 +51,7 @@ import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor';
import { isINotebookInput } from 'sql/workbench/services/notebook/browser/interface';
import { INotebookShowOptions } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { NotebookLanguage } from 'sql/workbench/common/constants';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
@@ -140,7 +141,8 @@ export class NotebookService extends Disposable implements INotebookService {
@IProductService private readonly productService: IProductService,
@IEditorService private _editorService: IEditorService,
@IUntitledTextEditorService private _untitledEditorService: IUntitledTextEditorService,
@IEditorGroupsService private _editorGroupService: IEditorGroupsService
@IEditorGroupsService private _editorGroupService: IEditorGroupsService,
@IConfigurationService private _configurationService: IConfigurationService
) {
super();
this._providersMemento = new Memento('notebookProviders', this._storageService);
@@ -581,11 +583,21 @@ export class NotebookService extends Disposable implements INotebookService {
if (notebookUri.scheme === Schemas.untitled) {
return true;
}
const trustedBooksConfigKey = 'notebook.trustedBooks';
let cacheInfo = this.trustedNotebooksMemento.trustedNotebooksCache[notebookUri.toString()];
if (!cacheInfo) {
// This notebook was never trusted
return false;
// Check if the notebook belongs to a book that's trusted
// and is not part of untrusted queue.
let trustedBookDirectories: string[] = !this._unTrustedCacheQueue.find(n => n === notebookUri) ? this._configurationService?.getValue(trustedBooksConfigKey) ?? [] : [];
if (trustedBookDirectories.find(b => notebookUri.fsPath.indexOf(b) > -1)) {
return true;
// note: we're ignoring the dirty check below since that's needed only when
// someone trusts notebook after it's loaded and this check is during the load time
} else {
// This notebook was never trusted
return false;
}
}
// This was trusted. If it's not dirty (e.g. if we're not working on our cached copy)
// then should verify it's not been modified on disk since that invalidates trust relationship

View File

@@ -50,6 +50,7 @@ suite('MainThreadNotebook Tests', () => {
undefined,
undefined,
undefined,
undefined,
);
mockNotebookService = TypeMoq.Mock.ofInstance(notebookService);
notebookUri = URI.parse('file:/user/default/my.ipynb');