Skip to content

Commit

Permalink
Multi-version: declare the installed extension as soon as possible (#…
Browse files Browse the repository at this point in the history
…33282)

* Multi-version: declare the installed extension as soon as possible

* more tests
  • Loading branch information
Dima Voytenko committed Mar 16, 2021
1 parent e2ba971 commit dab790a
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/service/extensions-impl.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ export class Extensions {
if (extLoaders[extensionId]) {
return extLoaders[extensionId];
}
ampdoc.declareExtension(extensionId, version);
stubElementIfNotKnown(ampdoc.win, extensionId);
return (extLoaders[extensionId] = this.preloadExtension(
extensionId,
Expand Down
12 changes: 10 additions & 2 deletions test/unit/test-extensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -1324,6 +1324,10 @@ describes.sandboxed('Extensions', {}, () => {
).to.have.length(0);
expect(extensions.extensions_['amp-test']).to.be.undefined;
extensions.installExtensionForDoc(ampdoc, 'amp-test', '0.2');

// Extension is declared immediately.
expect(ampdoc.declaresExtension('amp-test', '0.2')).to.be.true;

expect(loadSpy).to.be.calledOnce;
expect(loadSpy).to.be.calledWithExactly('amp-test', '0.2');
expect(
Expand Down Expand Up @@ -1364,7 +1368,9 @@ describes.sandboxed('Extensions', {}, () => {
extHolder.scriptPresent = true;
expect(ampdoc.declaresExtension('amp-test')).to.be.false;
const promise = extensions.installExtensionForDoc(ampdoc, 'amp-test');
expect(ampdoc.declaresExtension('amp-test')).to.be.false;

// Extension is declared immediately.
expect(ampdoc.declaresExtension('amp-test', '0.1')).to.be.true;

// Stubbed immediately.
expect(win.__AMP_EXTENDED_ELEMENTS['amp-test']).to.equal(ElementStub);
Expand Down Expand Up @@ -1433,7 +1439,9 @@ describes.sandboxed('Extensions', {}, () => {
extHolder.scriptPresent = true;
expect(ampdoc.declaresExtension('amp-test')).to.be.false;
const promise = extensions.installExtensionForDoc(ampdoc, 'amp-test');
expect(ampdoc.declaresExtension('amp-test')).to.be.false;

// Extension is declared immediately.
expect(ampdoc.declaresExtension('amp-test', '0.1')).to.be.true;

// Services do not exist yet.
allowConsoleError(() => {
Expand Down

0 comments on commit dab790a

Please sign in to comment.