| Index: chrome/renderer/chrome_content_renderer_client_browsertest.cc
|
| diff --git a/chrome/renderer/chrome_content_renderer_client_browsertest.cc b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
|
| index 680978434e8908109c8ad94bb34496b59c390cc9..1ae1a3953d4f777422938a3f357dd96f6fd9f86c 100644
|
| --- a/chrome/renderer/chrome_content_renderer_client_browsertest.cc
|
| +++ b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
|
| @@ -80,7 +80,62 @@ TEST_F(InstantProcessNavigationTest, ForkForNavigationsToSearchURLs) {
|
| &unused));
|
| }
|
|
|
| -class ChromeContentRendererClientBrowserTest : public InProcessBrowserTest {
|
| +// The tests below examine Youtube requests that use the Flash API and ensure
|
| +// that the requests have been modified to instead use HTML5. The tests also
|
| +// check the MIME type of the request to ensure that it is "text/html".
|
| +namespace {
|
| +
|
| +struct FlashEmbedsTestData {
|
| + std::string name;
|
| + std::string host;
|
| + std::string path;
|
| + std::string type;
|
| + std::string expected_url;
|
| +};
|
| +
|
| +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"
|
| + }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class ChromeContentRendererClientBrowserTest :
|
| + public InProcessBrowserTest,
|
| + public ::testing::WithParamInterface<FlashEmbedsTestData> {
|
| public:
|
| void MonitorRequestHandler(const net::test_server::HttpRequest& request) {
|
| // We're only interested in YouTube video embeds
|
| @@ -92,82 +147,67 @@ class ChromeContentRendererClientBrowserTest : public InProcessBrowserTest {
|
| return;
|
|
|
| auto type = request.headers.find("Accept");
|
| - EXPECT_NE(std::string::npos, type->second.find("text/html"));
|
| + EXPECT_NE(std::string::npos, type->second.find("text/html"))
|
| + << "Type is not text/html for test " << GetParam().name;
|
|
|
| - EXPECT_EQ(request.relative_url, expected_url_);
|
| + EXPECT_EQ(request.relative_url, GetParam().expected_url)
|
| + << "URL is wrong for test " << GetParam().name;
|
| content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
|
| message_runner_->QuitClosure());
|
| }
|
|
|
| void WaitForYouTubeRequest() {
|
| - message_runner_ = new content::MessageLoopRunner();
|
| message_runner_->Run();
|
| }
|
|
|
| - void set_expected_url(std::string given) { expected_url_ = given; }
|
| + void SetUpOnMainThread() override {
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| +
|
| + host_resolver()->AddRule("*", "127.0.0.1");
|
| +
|
| + embedded_test_server()->ServeFilesFromSourceDirectory(
|
| + base::FilePath(kDocRoot));
|
| + embedded_test_server()->RegisterRequestMonitor(base::Bind(
|
| + &ChromeContentRendererClientBrowserTest::MonitorRequestHandler,
|
| + base::Unretained(this)));
|
| + message_runner_ = new content::MessageLoopRunner();
|
| + }
|
|
|
| private:
|
| - std::string expected_url_;
|
| scoped_refptr<content::MessageLoopRunner> message_runner_;
|
| };
|
|
|
| -// These tests examine Youtube requests that use the Flash API and ensure that
|
| -// the requests have been modified to instead use HTML5. The tests also check
|
| -// the MIME type of the request to ensure that it is "text/html".
|
| -IN_PROC_BROWSER_TEST_F(ChromeContentRendererClientBrowserTest,
|
| +IN_PROC_BROWSER_TEST_P(ChromeContentRendererClientBrowserTest,
|
| RewriteYouTubeFlashEmbed) {
|
| - ASSERT_TRUE(embedded_test_server()->Start());
|
| -
|
| - host_resolver()->AddRule("*", "127.0.0.1");
|
| -
|
| - embedded_test_server()->ServeFilesFromSourceDirectory(
|
| - base::FilePath(kDocRoot));
|
| - embedded_test_server()->RegisterRequestMonitor(
|
| - base::Bind(&ChromeContentRendererClientBrowserTest::MonitorRequestHandler,
|
| - base::Unretained(this)));
|
| -
|
| GURL url(embedded_test_server()->GetURL("/flash_embeds.html"));
|
| -
|
| ui_test_utils::NavigateToURL(browser(), url);
|
| -
|
| content::WebContents* web_contents =
|
| browser()->tab_strip_model()->GetActiveWebContents();
|
| std::string port = std::to_string(embedded_test_server()->port());
|
|
|
| - // Valid URL, no parameters
|
| - std::string video_url = "http://www.youtube.com:" + port + "/v/deadbeef";
|
| - std::string mime_type = "application/x-shockwave-flash";
|
| - set_expected_url("/embed/deadbeef");
|
| - EXPECT_TRUE(ExecuteScript(
|
| - web_contents, "appendToDOM('" + video_url + "','" + mime_type + "');"));
|
| - WaitForYouTubeRequest();
|
| -
|
| - // Valid URL, no parameters, subdomain
|
| - video_url = "http://www.foo.youtube.com:" + port + "/v/deadbeef";
|
| - set_expected_url("/embed/deadbeef");
|
| - EXPECT_TRUE(ExecuteScript(
|
| - web_contents, "appendToDOM('" + video_url + "','" + mime_type + "');"));
|
| - WaitForYouTubeRequest();
|
| -
|
| - // Valid URL, many parameters
|
| - video_url = "http://www.youtube.com:" + port + "/v/deadbeef?start=4&fs=1";
|
| - set_expected_url("/embed/deadbeef?start=4&fs=1");
|
| - EXPECT_TRUE(ExecuteScript(
|
| - web_contents, "appendToDOM('" + video_url + "','" + mime_type + "');"));
|
| + std::string video_url =
|
| + "http://" + GetParam().host + ":" + port + GetParam().path;
|
| + EXPECT_TRUE(ExecuteScript(web_contents,
|
| + "appendEmbedToDOM('" + video_url + "','" + GetParam().type + "');"));
|
| WaitForYouTubeRequest();
|
| +}
|
|
|
| - // Invalid parameter construct, many parameters
|
| - video_url = "http://www.youtube.com:" + port + "/v/deadbeef&bar=4&foo=6";
|
| - set_expected_url("/embed/deadbeef?bar=4&foo=6");
|
| - EXPECT_TRUE(ExecuteScript(
|
| - web_contents, "appendToDOM('" + video_url + "','" + mime_type + "');"));
|
| - WaitForYouTubeRequest();
|
| +IN_PROC_BROWSER_TEST_P(ChromeContentRendererClientBrowserTest,
|
| + RewriteYouTubeFlashEmbedObject) {
|
| + GURL url(embedded_test_server()->GetURL("/flash_embeds.html"));
|
| + ui_test_utils::NavigateToURL(browser(), url);
|
| + content::WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + std::string port = std::to_string(embedded_test_server()->port());
|
|
|
| - // Valid URL, enablejsapi=1
|
| - video_url = "http://www.youtube.com:" + port + "/v/deadbeef?enablejsapi=1";
|
| - mime_type = "";
|
| - set_expected_url("/v/deadbeef?enablejsapi=1");
|
| - EXPECT_TRUE(ExecuteScript(
|
| - web_contents, "appendToDOM('" + video_url + "','" + mime_type + "');"));
|
| + std::string video_url =
|
| + "http://" + GetParam().host + ":" + port + GetParam().path;
|
| + EXPECT_TRUE(ExecuteScript(web_contents,
|
| + "appendDataEmbedToDOM('" + video_url + "','" + GetParam().type + "');"));
|
| WaitForYouTubeRequest();
|
| }
|
| +
|
| +INSTANTIATE_TEST_CASE_P(
|
| + FlashEmbeds,
|
| + ChromeContentRendererClientBrowserTest,
|
| + ::testing::ValuesIn(kFlashEmbedsTestData));
|
|
|