From c48e63c597f6fa54f6c08d10db8be66d9b61499c Mon Sep 17 00:00:00 2001 From: izabelk Date: Wed, 2 Nov 2016 20:42:05 +0200 Subject: [PATCH] Fixed the bug in YoutubeVideoSanitizer related to not handling iframes with youtube-nocookie host. Added tests for it. --- .../Html2Amp.IntegrationTests.csproj | 2 ++ .../YouTubeVideoSanitizationWithNoCookieHost.in | 2 ++ .../YouTubeVideoSanitizationWithNoCookieHost.out | 2 ++ .../YouTubeVideoSanitization.cs | 14 ++++++++++++++ .../YouTubeVideoSanitizer_CanSanitizer_Should.cs | 14 ++++++++++++++ .../Implementation/YouTubeVideoSanitizer.cs | 2 +- 6 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.in create mode 100644 Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.out diff --git a/Html2Amp.IntegrationTests/Html2Amp.IntegrationTests.csproj b/Html2Amp.IntegrationTests/Html2Amp.IntegrationTests.csproj index 8bce04d..8bafe96 100644 --- a/Html2Amp.IntegrationTests/Html2Amp.IntegrationTests.csproj +++ b/Html2Amp.IntegrationTests/Html2Amp.IntegrationTests.csproj @@ -141,6 +141,8 @@ + + diff --git a/Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.in b/Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.in new file mode 100644 index 0000000..0d0cf42 --- /dev/null +++ b/Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.in @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.out b/Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.out new file mode 100644 index 0000000..1b0d68c --- /dev/null +++ b/Html2Amp.IntegrationTests/TestData/YouTubeVideoSanitizationWithNoCookieHost/YouTubeVideoSanitizationWithNoCookieHost.out @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/Html2Amp.IntegrationTests/Tests/YouTubeVideoSanitizationTests/YouTubeVideoSanitization.cs b/Html2Amp.IntegrationTests/Tests/YouTubeVideoSanitizationTests/YouTubeVideoSanitization.cs index 853e796..defeb57 100644 --- a/Html2Amp.IntegrationTests/Tests/YouTubeVideoSanitizationTests/YouTubeVideoSanitization.cs +++ b/Html2Amp.IntegrationTests/Tests/YouTubeVideoSanitizationTests/YouTubeVideoSanitization.cs @@ -131,5 +131,19 @@ public void YouTubeVideoSanitizationWithChildren() HtmlAssert.AreEqual(TestDataProvider.GetOutFile(TestName), actualResult); AmpAssert.IsValidAmp(TestName); } + + [TestMethod] + public void YouTubeVideoSanitizationWithNoCookieHost() + { + // Arrange + const string TestName = "YouTubeVideoSanitizationWithNoCookieHost"; + + // Act + var actualResult = HtmlTestFileToAmpConverter.Convert(TestName); + + // Assert + HtmlAssert.AreEqual(TestDataProvider.GetOutFile(TestName), actualResult); + AmpAssert.IsValidAmp(TestName); + } } } \ No newline at end of file diff --git a/Html2Amp.UnitTests/YouTubeVideoSanitizerTests/YouTubeVideoSanitizer_CanSanitizer_Should.cs b/Html2Amp.UnitTests/YouTubeVideoSanitizerTests/YouTubeVideoSanitizer_CanSanitizer_Should.cs index dafc7ea..e761e33 100644 --- a/Html2Amp.UnitTests/YouTubeVideoSanitizerTests/YouTubeVideoSanitizer_CanSanitizer_Should.cs +++ b/Html2Amp.UnitTests/YouTubeVideoSanitizerTests/YouTubeVideoSanitizer_CanSanitizer_Should.cs @@ -99,5 +99,19 @@ public void ReturnTrue_WhenSourceAttributeIsYouTubeDomainAndStartsWithWWW() // Assert Assert.IsTrue(actualResult); } + + [TestMethod] + public void ReturnTrue_WhenSourceAttributeIsYouTubeNoCookie() + { + // Arrange + var htmlElement = ElementFactory.CreateIFrame(); + htmlElement.Source = "http://www.youtube-nocookie.com/embed/d8fr3AdK_tQ4"; + + // Act + var actualResult = new YouTubeVideoSanitizer().CanSanitize(htmlElement); + + // Assert + Assert.IsTrue(actualResult); + } } } \ No newline at end of file diff --git a/Html2Amp/Sanitization/Implementation/YouTubeVideoSanitizer.cs b/Html2Amp/Sanitization/Implementation/YouTubeVideoSanitizer.cs index 22f2c61..7f4bdd9 100644 --- a/Html2Amp/Sanitization/Implementation/YouTubeVideoSanitizer.cs +++ b/Html2Amp/Sanitization/Implementation/YouTubeVideoSanitizer.cs @@ -28,7 +28,7 @@ public override bool CanSanitize(IElement element) if (Uri.TryCreate(sourceAttributeValue, UriKind.Absolute, out sourceUri)) { return sourceUri.LocalPath.StartsWith("/embed/") - && Regex.IsMatch(sourceUri.Host, @"^(www\.)?youtube\.com$"); + && Regex.IsMatch(sourceUri.Host, @"^(www\.)?youtube(-nocookie)?\.com$"); } return false;