OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/chrome_content_renderer_client.h" | 5 #include "chrome/renderer/chrome_content_renderer_client.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1414 | 1414 |
1415 // We'll only modify YouTube Flash embeds. The URLs can be recognized since | 1415 // We'll only modify YouTube Flash embeds. The URLs can be recognized since |
1416 // they're in the following form: youtube.com/v/VIDEO_ID. So, we check to see | 1416 // they're in the following form: youtube.com/v/VIDEO_ID. So, we check to see |
1417 // if the given URL does follow that format. | 1417 // if the given URL does follow that format. |
1418 if (!url.DomainIs("youtube.com") && !url.DomainIs("youtube-nocookie.com")) | 1418 if (!url.DomainIs("youtube.com") && !url.DomainIs("youtube-nocookie.com")) |
1419 return GURL(); | 1419 return GURL(); |
1420 if (url.path().find("/v/") != 0) | 1420 if (url.path().find("/v/") != 0) |
1421 return GURL(); | 1421 return GURL(); |
1422 | 1422 |
1423 std::string url_str = url.spec(); | 1423 std::string url_str = url.spec(); |
| 1424 internal::YouTubeRewriteStatus result = internal::NUM_PLUGIN_ERROR; |
1424 | 1425 |
1425 // If the website is using an invalid YouTube URL, we'll try and | 1426 // If the website is using an invalid YouTube URL, we'll try and |
1426 // fix the URL by ensuring that if there are multiple parameters, | 1427 // fix the URL by ensuring that if there are multiple parameters, |
1427 // the parameter string begins with a "?" and then follows with a "&" | 1428 // the parameter string begins with a "?" and then follows with a "&" |
1428 // for each subsequent parameter. We do this because the Flash video player | 1429 // for each subsequent parameter. We do this because the Flash video player |
1429 // has some URL correction capabilities so we don't want this move to HTML5 | 1430 // has some URL correction capabilities so we don't want this move to HTML5 |
1430 // to break webpages that used to work. | 1431 // to break webpages that used to work. |
1431 size_t index = url_str.find_first_of("&?"); | 1432 size_t index = url_str.find_first_of("&?"); |
1432 bool invalid_url = index != std::string::npos && url_str.at(index) == '&'; | 1433 bool invalid_url = index != std::string::npos && url_str.at(index) == '&'; |
1433 | 1434 |
1434 if (invalid_url) { | 1435 if (invalid_url) { |
1435 // ? should appear first before all parameters | 1436 // ? should appear first before all parameters |
1436 url_str.replace(index, 1, "?"); | 1437 url_str.replace(index, 1, "?"); |
1437 | 1438 |
1438 // Replace all instances of ? (after the first) with & | 1439 // Replace all instances of ? (after the first) with & |
1439 for (size_t pos = index + 1; | 1440 for (size_t pos = index + 1; |
1440 (pos = url_str.find("?", pos)) != std::string::npos; pos += 1) { | 1441 (pos = url_str.find("?", pos)) != std::string::npos; pos += 1) { |
1441 url_str.replace(pos, 1, "&"); | 1442 url_str.replace(pos, 1, "&"); |
1442 } | 1443 } |
1443 } | 1444 } |
1444 | 1445 |
1445 GURL corrected_url = GURL(url_str); | 1446 GURL corrected_url = GURL(url_str); |
1446 | 1447 // Unless we're on an Android device, we don't modify any URLs that contain |
1447 // We don't modify any URLs that contain the enablejsapi=1 parameter | 1448 // the enablejsapi=1 parameter since the page may be interacting with the |
1448 // since the page may be interacting with the YouTube Flash player in | 1449 // YouTube Flash player in Javascript and we don't want to break working |
1449 // Javascript and we don't want to break working content. | 1450 // content. If we're on an Android device and the URL contains the |
| 1451 // enablejsapi=1 parameter, we do override the URL. |
1450 if (corrected_url.query().find("enablejsapi=1") != std::string::npos) { | 1452 if (corrected_url.query().find("enablejsapi=1") != std::string::npos) { |
| 1453 #if defined(OS_ANDROID) |
| 1454 result = internal::SUCCESS_ENABLEJSAPI; |
| 1455 #else |
1451 RecordYouTubeRewriteUMA(internal::FAILURE_ENABLEJSAPI); | 1456 RecordYouTubeRewriteUMA(internal::FAILURE_ENABLEJSAPI); |
1452 return GURL(); | 1457 return GURL(); |
| 1458 #endif |
1453 } | 1459 } |
1454 | 1460 |
1455 // Change the path to use the YouTube HTML5 API | 1461 // Change the path to use the YouTube HTML5 API |
1456 std::string path = corrected_url.path(); | 1462 std::string path = corrected_url.path(); |
1457 path.replace(path.find("/v/"), 3, "/embed/"); | 1463 path.replace(path.find("/v/"), 3, "/embed/"); |
1458 | 1464 |
1459 url::Replacements<char> r; | 1465 url::Replacements<char> r; |
1460 r.SetPath(path.c_str(), url::Component(0, path.length())); | 1466 r.SetPath(path.c_str(), url::Component(0, path.length())); |
1461 | 1467 |
1462 RecordYouTubeRewriteUMA(invalid_url ? internal::SUCCESS_PARAMS_REWRITE | 1468 if (result == internal::NUM_PLUGIN_ERROR) |
1463 : internal::SUCCESS); | 1469 result = invalid_url ? internal::SUCCESS_PARAMS_REWRITE : internal::SUCCESS; |
| 1470 |
| 1471 RecordYouTubeRewriteUMA(result); |
1464 return corrected_url.ReplaceComponents(r); | 1472 return corrected_url.ReplaceComponents(r); |
1465 } | 1473 } |
OLD | NEW |