From 769f71b2e24307081433692fb479ff9815a26761 Mon Sep 17 00:00:00 2001 From: keithwrightbos Date: Fri, 22 Sep 2017 13:48:38 -0400 Subject: [PATCH 1/3] Amp Ad Fast Fetch allow amp-image prefetch --- extensions/amp-a4a/0.1/amp-a4a.js | 13 +- extensions/amp-a4a/0.1/test/test-amp-a4a.js | 129 ++++++++++++-------- 2 files changed, 85 insertions(+), 57 deletions(-) diff --git a/extensions/amp-a4a/0.1/amp-a4a.js b/extensions/amp-a4a/0.1/amp-a4a.js index 04ab5f1205ee..af75f5465c66 100644 --- a/extensions/amp-a4a/0.1/amp-a4a.js +++ b/extensions/amp-a4a/0.1/amp-a4a.js @@ -40,7 +40,7 @@ import {isArray, isObject, isEnumValue} from '../../../src/types'; import {utf8Decode} from '../../../src/utils/bytes'; import {getBinaryType, isExperimentOn} from '../../../src/experiments'; import {setStyle} from '../../../src/style'; -import {assertHttpsUrl} from '../../../src/url'; +import {assertHttpsUrl, isSecureUrl} from '../../../src/url'; import {parseJson} from '../../../src/json'; import {handleClick} from '../../../ads/alp/handler'; import { @@ -106,7 +106,8 @@ export let SizeInfoDef; /** @typedef {{ minifiedCreative: string, customElementExtensions: !Array, - customStylesheets: !Array<{href: string}> + customStylesheets: !Array<{href: string}>, + ampImages: Array|undefined, }} */ let CreativeMetaDataDef; @@ -738,6 +739,9 @@ export class AmpA4A extends AMP.BaseElement { // Preload any fonts. (creativeMetaDataDef.customStylesheets || []).forEach(font => this.preconnect.preload(font.href)); + // Preload any AMP images. + (creativeMetaDataDef.ampImages || []).forEach(image => + isSecureUrl(image) && this.preconnect.preload(image)); return creativeMetaDataDef; }) .catch(error => { @@ -1475,11 +1479,14 @@ export class AmpA4A extends AMP.BaseElement { metaData.customStylesheets.forEach(stylesheet => { if (!isObject(stylesheet) || !stylesheet['href'] || typeof stylesheet['href'] !== 'string' || - !/^https:\/\//i.test(stylesheet['href'])) { + !isSecureUrl(stylesheet['href'])) { throw new Error(errorMsg); } }); } + if (isArray(metaDataObj['ampImages'])) { + metaData.ampImages = metaDataObj['ampImages']; + } // TODO(keithwrightbos): OK to assume ampRuntimeUtf16CharOffsets is before // metadata as its in the head? metaData.minifiedCreative = diff --git a/extensions/amp-a4a/0.1/test/test-amp-a4a.js b/extensions/amp-a4a/0.1/test/test-amp-a4a.js index 201f8ea17479..f63a865e8aa1 100644 --- a/extensions/amp-a4a/0.1/test/test-amp-a4a.js +++ b/extensions/amp-a4a/0.1/test/test-amp-a4a.js @@ -152,7 +152,7 @@ describe('amp-a4a', () => { function buildCreativeString(opt_additionalInfo) { const baseTestDoc = testFragments.minimalDocOneStyle; - const offsets = opt_additionalInfo || {}; + const offsets = Object.assign({}, opt_additionalInfo || {}); offsets.ampRuntimeUtf16CharOffsets = [ baseTestDoc.indexOf('