YouTube Flash Embeds: rewrite all embeds, even enablejsapi=1.
YouTube has deprecated Flash embeds so it will provide a better
experience for our users to have them inlined with possible breakage
instead of having to use Flash and navigate to YouTube.
Bug: 763322
Change-Id: I3243e3048f499ec51e3220ebd18201a94e3eca46
Reviewed-on: https://chromium-review.googlesource.com/657277
Reviewed-by: Jochen Eisinger <jochen@chromium.org>
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501587}
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index d826061..36fdaa7 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -1638,19 +1638,12 @@
}
GURL corrected_url = GURL(url_str);
- // Unless we're on an Android device, we don't modify any URLs that contain
- // the enablejsapi=1 parameter since the page may be interacting with the
- // YouTube Flash player in Javascript and we don't want to break working
- // content. If we're on an Android device and the URL contains the
- // enablejsapi=1 parameter, we do override the URL.
- if (corrected_url.query().find("enablejsapi=1") != std::string::npos) {
-#if defined(OS_ANDROID)
+ // Chrome used to only rewrite embeds with enablejsapi=1 on mobile for
+ // backward compatibility but with Flash embeds deprecated by YouTube, they
+ // are rewritten on all platforms. However, a different result is used in
+ // order to keep track of how popular they are.
+ if (corrected_url.query().find("enablejsapi=1") != std::string::npos)
result = internal::SUCCESS_ENABLEJSAPI;
-#else
- RecordYouTubeRewriteUMA(internal::FAILURE_ENABLEJSAPI);
- return GURL();
-#endif
- }
// Change the path to use the YouTube HTML5 API
std::string path = corrected_url.path();
diff --git a/chrome/renderer/chrome_content_renderer_client_browsertest.cc b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
index 934c1d7e..e8a4d65 100644
--- a/chrome/renderer/chrome_content_renderer_client_browsertest.cc
+++ b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
@@ -132,42 +132,18 @@
};
const FlashEmbedsTestData kFlashEmbedsTestData[] = {
- {
- "Valid URL, no parameters",
- "www.youtube.com",
- "/v/deadbeef",
- "application/x-shockwave-flash",
- "/embed/deadbeef"
- },
- {
- "Valid URL, no parameters, subdomain",
- "www.foo.youtube.com",
- "/v/deadbeef",
- "application/x-shockwave-flash",
- "/embed/deadbeef"
- },
- {
- "Valid URL, many parameters",
- "www.youtube.com",
- "/v/deadbeef?start=4&fs=1",
- "application/x-shockwave-flash",
- "/embed/deadbeef?start=4&fs=1"
- },
- {
- "Invalid parameter construct, many parameters",
- "www.youtube.com",
- "/v/deadbeef&bar=4&foo=6",
- "application/x-shockwave-flash",
- "/embed/deadbeef?bar=4&foo=6"
- },
- {
- "Valid URL, enablejsapi=1",
- "www.youtube.com",
- "/v/deadbeef?enablejsapi=1",
- "",
- "/v/deadbeef?enablejsapi=1"
- }
-};
+ {"Valid URL, no parameters", "www.youtube.com", "/v/deadbeef",
+ "application/x-shockwave-flash", "/embed/deadbeef"},
+ {"Valid URL, no parameters, subdomain", "www.foo.youtube.com",
+ "/v/deadbeef", "application/x-shockwave-flash", "/embed/deadbeef"},
+ {"Valid URL, many parameters", "www.youtube.com",
+ "/v/deadbeef?start=4&fs=1", "application/x-shockwave-flash",
+ "/embed/deadbeef?start=4&fs=1"},
+ {"Invalid parameter construct, many parameters", "www.youtube.com",
+ "/v/deadbeef&bar=4&foo=6", "application/x-shockwave-flash",
+ "/embed/deadbeef?bar=4&foo=6"},
+ {"Valid URL, enablejsapi=1", "www.youtube.com", "/v/deadbeef?enablejsapi=1",
+ "application/x-shockwave-flash", "/embed/deadbeef?enablejsapi=1"}};
} // namespace
diff --git a/chrome/renderer/chrome_content_renderer_client_unittest.cc b/chrome/renderer/chrome_content_renderer_client_unittest.cc
index 7e4e8565..50d8c94b 100644
--- a/chrome/renderer/chrome_content_renderer_client_unittest.cc
+++ b/chrome/renderer/chrome_content_renderer_client_unittest.cc
@@ -418,8 +418,7 @@
[data_reduction_proxy::chrome_proxy_content_transform_header()]);
}
-// These are tests that are common for both Android and desktop browsers.
-TEST_F(ChromeContentRendererClientTest, RewriteEmbedCommon) {
+TEST_F(ChromeContentRendererClientTest, RewriteEmbed) {
struct TestData {
std::string original;
std::string expected;
@@ -498,21 +497,6 @@
// youtube-nocookie.com, https
{"https://www.youtube-nocookie.com/v/123/",
"https://www.youtube-nocookie.com/embed/123/"},
- };
-
- ChromeContentRendererClient client;
-
- for (const auto& data : test_data)
- EXPECT_EQ(GURL(data.expected),
- client.OverrideFlashEmbedWithHTML(GURL(data.original)));
-}
-
-#if defined(OS_ANDROID)
-TEST_F(ChromeContentRendererClientTest, RewriteEmbedAndroid) {
- struct TestData {
- std::string original;
- std::string expected;
- } test_data[] = {
// URL isn't using Flash, has JS API enabled
{"http://www.youtube.com/embed/deadbeef?enablejsapi=1", ""},
// URL is using Flash, has JS API enabled
@@ -532,38 +516,11 @@
ChromeContentRendererClient client;
- for (const auto& data : test_data) {
+ for (const auto& data : test_data)
EXPECT_EQ(GURL(data.expected),
client.OverrideFlashEmbedWithHTML(GURL(data.original)));
- }
}
-#else
-TEST_F(ChromeContentRendererClientTest, RewriteEmbedDesktop) {
- struct TestData {
- std::string original;
- std::string expected;
- } test_data[] = {
- // URL isn't using Flash, has JS API enabled
- {"http://www.youtube.com/embed/deadbeef?enablejsapi=1", ""},
- // URL is using Flash, has JS API enabled
- {"http://www.youtube.com/v/deadbeef?enablejsapi=1", ""},
- // youtube-nocookie.com, has JS API enabled
- {"http://www.youtube-nocookie.com/v/123?enablejsapi=1", ""},
- // URL is using Flash, has JS API enabled, invalid parameter construct
- {"http://www.youtube.com/v/deadbeef&enablejsapi=1", ""},
- // URL is using Flash, has JS API enabled, invalid parameter construct,
- // has multiple parameters
- {"http://www.youtube.com/v/deadbeef&start=4&enablejsapi=1", ""},
- };
- ChromeContentRendererClient client;
-
- for (const auto& data : test_data) {
- EXPECT_EQ(GURL(data.expected),
- client.OverrideFlashEmbedWithHTML(GURL(data.original)));
- }
-}
-#endif
class ChromeContentRendererClientMetricsTest : public testing::Test {
public:
ChromeContentRendererClientMetricsTest() = default;
@@ -680,9 +637,7 @@
EXPECT_EQ(total_count, samples->TotalCount());
}
-#if defined(OS_ANDROID)
-TEST_F(ChromeContentRendererClientMetricsTest,
- RewriteEmbedFailureJSAPIAndroid) {
+TEST_F(ChromeContentRendererClientMetricsTest, RewriteEmbedJSAPI) {
ChromeContentRendererClient client;
std::unique_ptr<base::HistogramSamples> samples = GetHistogramSamples();
@@ -709,30 +664,3 @@
}
}
-#else
-TEST_F(ChromeContentRendererClientMetricsTest,
- RewriteEmbedFailureJSAPIDesktop) {
- ChromeContentRendererClient client;
-
- std::unique_ptr<base::HistogramSamples> samples = GetHistogramSamples();
- auto total_count = 0;
- EXPECT_EQ(total_count, samples->TotalCount());
-
- const std::string test_data[] = {
- // Valid parameter construct, one parameter
- "http://www.youtube.com/v/deadbeef?enablejsapi=1",
- // Invalid parameter construct, one parameter
- "http://www.youtube.com/v/deadbeef&enablejsapi=1",
- // Invalid parameter construct, has multiple parameters
- "http://www.youtube.com/v/deadbeef&start=4&enablejsapi=1?foo=2"};
-
- for (const auto& data : test_data) {
- ++total_count;
- GURL gurl = GURL(data);
- OverrideFlashEmbed(gurl);
- samples = GetHistogramSamples();
- EXPECT_EQ(total_count, samples->GetCount(internal::FAILURE_ENABLEJSAPI));
- EXPECT_EQ(total_count, samples->TotalCount());
- }
-}
-#endif