| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stdint.h> | 5 #include <stdint.h> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 { | 260 { |
| 261 GetManifestAndWait(); | 261 GetManifestAndWait(); |
| 262 EXPECT_TRUE(manifest().IsEmpty()); | 262 EXPECT_TRUE(manifest().IsEmpty()); |
| 263 EXPECT_TRUE(manifest_url().is_empty()); | 263 EXPECT_TRUE(manifest_url().is_empty()); |
| 264 EXPECT_TRUE(reported_manifest_urls().empty()); | 264 EXPECT_TRUE(reported_manifest_urls().empty()); |
| 265 } | 265 } |
| 266 | 266 |
| 267 { | 267 { |
| 268 std::string manifest_link = | 268 std::string manifest_link = |
| 269 embedded_test_server()->GetURL("/manifest/dummy-manifest.json").spec(); | 269 embedded_test_server()->GetURL("/manifest/dummy-manifest.json").spec(); |
| 270 ASSERT_TRUE(content::ExecuteScript( | 270 ASSERT_TRUE( |
| 271 shell(), "setManifestTo('" + manifest_link + "')")); | 271 ExecuteScript(shell(), "setManifestTo('" + manifest_link + "')")); |
| 272 | 272 |
| 273 GetManifestAndWait(); | 273 GetManifestAndWait(); |
| 274 EXPECT_FALSE(manifest().IsEmpty()); | 274 EXPECT_FALSE(manifest().IsEmpty()); |
| 275 EXPECT_FALSE(manifest_url().is_empty()); | 275 EXPECT_FALSE(manifest_url().is_empty()); |
| 276 expected_manifest_urls.push_back(manifest_url()); | 276 expected_manifest_urls.push_back(manifest_url()); |
| 277 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); | 277 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); |
| 278 } | 278 } |
| 279 { | 279 { |
| 280 std::string manifest_link = | 280 std::string manifest_link = |
| 281 embedded_test_server()->GetURL("/manifest/empty-manifest.json").spec(); | 281 embedded_test_server()->GetURL("/manifest/empty-manifest.json").spec(); |
| 282 ASSERT_TRUE(content::ExecuteScript( | 282 ASSERT_TRUE( |
| 283 shell(), "setManifestTo('" + manifest_link + "')")); | 283 ExecuteScript(shell(), "setManifestTo('" + manifest_link + "')")); |
| 284 | 284 |
| 285 GetManifestAndWait(); | 285 GetManifestAndWait(); |
| 286 EXPECT_TRUE(manifest().IsEmpty()); | 286 EXPECT_TRUE(manifest().IsEmpty()); |
| 287 EXPECT_FALSE(manifest_url().is_empty()); | 287 EXPECT_FALSE(manifest_url().is_empty()); |
| 288 expected_manifest_urls.push_back(manifest_url()); | 288 expected_manifest_urls.push_back(manifest_url()); |
| 289 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); | 289 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); |
| 290 } | 290 } |
| 291 | 291 |
| 292 { | 292 { |
| 293 ASSERT_TRUE(content::ExecuteScript(shell(), "clearManifest()")); | 293 ASSERT_TRUE(ExecuteScript(shell(), "clearManifest()")); |
| 294 | 294 |
| 295 GetManifestAndWait(); | 295 GetManifestAndWait(); |
| 296 EXPECT_TRUE(manifest().IsEmpty()); | 296 EXPECT_TRUE(manifest().IsEmpty()); |
| 297 EXPECT_TRUE(manifest_url().is_empty()); | 297 EXPECT_TRUE(manifest_url().is_empty()); |
| 298 expected_manifest_urls.push_back(manifest_url()); | 298 expected_manifest_urls.push_back(manifest_url()); |
| 299 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); | 299 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); |
| 300 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); | 300 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); |
| 301 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); | 301 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); |
| 302 } | 302 } |
| 303 | 303 |
| 304 EXPECT_EQ(0u, console_error_count()); | 304 EXPECT_EQ(0u, console_error_count()); |
| 305 } | 305 } |
| 306 | 306 |
| 307 // If a page's manifest lives in a different origin, it should follow the CORS | 307 // If a page's manifest lives in a different origin, it should follow the CORS |
| 308 // rules and requesting the manifest should return an empty manifest (unless the | 308 // rules and requesting the manifest should return an empty manifest (unless the |
| 309 // response contains CORS headers). | 309 // response contains CORS headers). |
| 310 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) { | 310 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) { |
| 311 ASSERT_TRUE(cors_embedded_test_server()->Start()); | 311 ASSERT_TRUE(cors_embedded_test_server()->Start()); |
| 312 ASSERT_NE(embedded_test_server()->port(), | 312 ASSERT_NE(embedded_test_server()->port(), |
| 313 cors_embedded_test_server()->port()); | 313 cors_embedded_test_server()->port()); |
| 314 | 314 |
| 315 GURL test_url = | 315 GURL test_url = |
| 316 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); | 316 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); |
| 317 std::vector<GURL> expected_manifest_urls; | 317 std::vector<GURL> expected_manifest_urls; |
| 318 | 318 |
| 319 ASSERT_TRUE(NavigateToURL(shell(), test_url)); | 319 ASSERT_TRUE(NavigateToURL(shell(), test_url)); |
| 320 | 320 |
| 321 std::string manifest_link = cors_embedded_test_server()->GetURL( | 321 std::string manifest_link = cors_embedded_test_server()->GetURL( |
| 322 "/manifest/dummy-manifest.json").spec(); | 322 "/manifest/dummy-manifest.json").spec(); |
| 323 ASSERT_TRUE(content::ExecuteScript(shell(), | 323 ASSERT_TRUE(ExecuteScript(shell(), "setManifestTo('" + manifest_link + "')")); |
| 324 "setManifestTo('" + manifest_link + "')")); | |
| 325 | 324 |
| 326 GetManifestAndWait(); | 325 GetManifestAndWait(); |
| 327 EXPECT_TRUE(manifest().IsEmpty()); | 326 EXPECT_TRUE(manifest().IsEmpty()); |
| 328 EXPECT_FALSE(manifest_url().is_empty()); | 327 EXPECT_FALSE(manifest_url().is_empty()); |
| 329 EXPECT_EQ(0u, console_error_count()); | 328 EXPECT_EQ(0u, console_error_count()); |
| 330 expected_manifest_urls.push_back(manifest_url()); | 329 expected_manifest_urls.push_back(manifest_url()); |
| 331 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); | 330 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); |
| 332 | 331 |
| 333 // The purpose of this second load is to make sure the first load is fully | 332 // The purpose of this second load is to make sure the first load is fully |
| 334 // finished. The first load will fail because of Access Control error but the | 333 // finished. The first load will fail because of Access Control error but the |
| 335 // underlying Blink loader will continue fetching the file. There is no | 334 // underlying Blink loader will continue fetching the file. There is no |
| 336 // reliable way to know when the fetch is finished from the browser test | 335 // reliable way to know when the fetch is finished from the browser test |
| 337 // except by fetching the same file from same origin, making it succeed when | 336 // except by fetching the same file from same origin, making it succeed when |
| 338 // it is actually fully loaded. | 337 // it is actually fully loaded. |
| 339 manifest_link = | 338 manifest_link = |
| 340 embedded_test_server()->GetURL("/manifest/dummy-manifest.json").spec(); | 339 embedded_test_server()->GetURL("/manifest/dummy-manifest.json").spec(); |
| 341 ASSERT_TRUE(content::ExecuteScript(shell(), | 340 ASSERT_TRUE(ExecuteScript(shell(), "setManifestTo('" + manifest_link + "')")); |
| 342 "setManifestTo('" + manifest_link + "')")); | |
| 343 GetManifestAndWait(); | 341 GetManifestAndWait(); |
| 344 expected_manifest_urls.push_back(manifest_url()); | 342 expected_manifest_urls.push_back(manifest_url()); |
| 345 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); | 343 EXPECT_EQ(expected_manifest_urls, reported_manifest_urls()); |
| 346 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); | 344 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); |
| 347 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); | 345 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); |
| 348 } | 346 } |
| 349 | 347 |
| 350 // If a page's manifest lives in a different origin, it should be accessible if | 348 // If a page's manifest lives in a different origin, it should be accessible if |
| 351 // it has valid access controls headers. | 349 // it has valid access controls headers. |
| 352 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifestWithAcessControls) { | 350 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifestWithAcessControls) { |
| 353 ASSERT_TRUE(cors_embedded_test_server()->Start()); | 351 ASSERT_TRUE(cors_embedded_test_server()->Start()); |
| 354 ASSERT_NE(embedded_test_server()->port(), | 352 ASSERT_NE(embedded_test_server()->port(), |
| 355 cors_embedded_test_server()->port()); | 353 cors_embedded_test_server()->port()); |
| 356 | 354 |
| 357 GURL test_url = | 355 GURL test_url = |
| 358 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); | 356 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); |
| 359 | 357 |
| 360 ASSERT_TRUE(NavigateToURL(shell(), test_url)); | 358 ASSERT_TRUE(NavigateToURL(shell(), test_url)); |
| 361 | 359 |
| 362 std::string manifest_link = cors_embedded_test_server()->GetURL( | 360 std::string manifest_link = cors_embedded_test_server()->GetURL( |
| 363 "/manifest/manifest-cors.json").spec(); | 361 "/manifest/manifest-cors.json").spec(); |
| 364 ASSERT_TRUE(content::ExecuteScript(shell(), | 362 ASSERT_TRUE(ExecuteScript(shell(), "setManifestTo('" + manifest_link + "')")); |
| 365 "setManifestTo('" + manifest_link + "')")); | |
| 366 | 363 |
| 367 GetManifestAndWait(); | 364 GetManifestAndWait(); |
| 368 EXPECT_FALSE(manifest().IsEmpty()); | 365 EXPECT_FALSE(manifest().IsEmpty()); |
| 369 EXPECT_FALSE(manifest_url().is_empty()); | 366 EXPECT_FALSE(manifest_url().is_empty()); |
| 370 EXPECT_EQ(0u, console_error_count()); | 367 EXPECT_EQ(0u, console_error_count()); |
| 371 ASSERT_EQ(1u, reported_manifest_urls().size()); | 368 ASSERT_EQ(1u, reported_manifest_urls().size()); |
| 372 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); | 369 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); |
| 373 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); | 370 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); |
| 374 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); | 371 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); |
| 375 } | 372 } |
| 376 | 373 |
| 377 // If a page's manifest is in an insecure origin while the page is in a secure | 374 // If a page's manifest is in an insecure origin while the page is in a secure |
| 378 // origin, requesting the manifest should return the empty manifest. | 375 // origin, requesting the manifest should return the empty manifest. |
| 379 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) { | 376 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) { |
| 380 std::unique_ptr<net::EmbeddedTestServer> https_server( | 377 std::unique_ptr<net::EmbeddedTestServer> https_server( |
| 381 new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); | 378 new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); |
| 382 https_server->ServeFilesFromSourceDirectory("content/test/data"); | 379 https_server->ServeFilesFromSourceDirectory("content/test/data"); |
| 383 | 380 |
| 384 ASSERT_TRUE(https_server->Start()); | 381 ASSERT_TRUE(https_server->Start()); |
| 385 | 382 |
| 386 GURL test_url = | 383 GURL test_url = |
| 387 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); | 384 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); |
| 388 | 385 |
| 389 ASSERT_TRUE(NavigateToURL(shell(), test_url)); | 386 ASSERT_TRUE(NavigateToURL(shell(), test_url)); |
| 390 | 387 |
| 391 std::string manifest_link = | 388 std::string manifest_link = |
| 392 https_server->GetURL("/manifest/dummy-manifest.json").spec(); | 389 https_server->GetURL("/manifest/dummy-manifest.json").spec(); |
| 393 ASSERT_TRUE(content::ExecuteScript(shell(), | 390 ASSERT_TRUE(ExecuteScript(shell(), "setManifestTo('" + manifest_link + "')")); |
| 394 "setManifestTo('" + manifest_link + "')")); | |
| 395 | 391 |
| 396 GetManifestAndWait(); | 392 GetManifestAndWait(); |
| 397 EXPECT_TRUE(manifest().IsEmpty()); | 393 EXPECT_TRUE(manifest().IsEmpty()); |
| 398 EXPECT_FALSE(manifest_url().is_empty()); | 394 EXPECT_FALSE(manifest_url().is_empty()); |
| 399 EXPECT_EQ(0u, console_error_count()); | 395 EXPECT_EQ(0u, console_error_count()); |
| 400 ASSERT_EQ(1u, reported_manifest_urls().size()); | 396 ASSERT_EQ(1u, reported_manifest_urls().size()); |
| 401 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); | 397 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); |
| 402 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); | 398 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); |
| 403 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); | 399 EXPECT_EQ(0u, manifests_reported_when_favicon_url_updated()[0]); |
| 404 } | 400 } |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 // If a page has a manifest and the page is navigated using pushState (ie. same | 472 // If a page has a manifest and the page is navigated using pushState (ie. same |
| 477 // page), it should keep its manifest state. | 473 // page), it should keep its manifest state. |
| 478 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, PushStateNavigation) { | 474 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, PushStateNavigation) { |
| 479 GURL test_url = | 475 GURL test_url = |
| 480 embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); | 476 embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); |
| 481 | 477 |
| 482 ASSERT_TRUE(NavigateToURL(shell(), test_url)); | 478 ASSERT_TRUE(NavigateToURL(shell(), test_url)); |
| 483 | 479 |
| 484 { | 480 { |
| 485 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 481 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 486 ASSERT_TRUE(content::ExecuteScript( | 482 ASSERT_TRUE(ExecuteScript( |
| 487 shell(), "history.pushState({foo: \"bar\"}, 'page', 'page.html');")); | 483 shell(), "history.pushState({foo: \"bar\"}, 'page', 'page.html');")); |
| 488 navigation_observer.Wait(); | 484 navigation_observer.Wait(); |
| 489 } | 485 } |
| 490 | 486 |
| 491 GetManifestAndWait(); | 487 GetManifestAndWait(); |
| 492 EXPECT_FALSE(manifest().IsEmpty()); | 488 EXPECT_FALSE(manifest().IsEmpty()); |
| 493 EXPECT_FALSE(manifest_url().is_empty()); | 489 EXPECT_FALSE(manifest_url().is_empty()); |
| 494 EXPECT_EQ(0u, console_error_count()); | 490 EXPECT_EQ(0u, console_error_count()); |
| 495 ASSERT_EQ(1u, reported_manifest_urls().size()); | 491 ASSERT_EQ(1u, reported_manifest_urls().size()); |
| 496 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); | 492 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); |
| 497 ASSERT_EQ(2u, manifests_reported_when_favicon_url_updated().size()); | 493 ASSERT_EQ(2u, manifests_reported_when_favicon_url_updated().size()); |
| 498 EXPECT_EQ(1u, manifests_reported_when_favicon_url_updated()[0]); | 494 EXPECT_EQ(1u, manifests_reported_when_favicon_url_updated()[0]); |
| 499 EXPECT_EQ(1u, manifests_reported_when_favicon_url_updated()[1]); | 495 EXPECT_EQ(1u, manifests_reported_when_favicon_url_updated()[1]); |
| 500 } | 496 } |
| 501 | 497 |
| 502 // If a page has a manifest and is navigated using an anchor (ie. same page), it | 498 // If a page has a manifest and is navigated using an anchor (ie. same page), it |
| 503 // should keep its manifest state. | 499 // should keep its manifest state. |
| 504 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, AnchorNavigation) { | 500 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, AnchorNavigation) { |
| 505 GURL test_url = | 501 GURL test_url = |
| 506 embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); | 502 embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); |
| 507 | 503 |
| 508 ASSERT_TRUE(NavigateToURL(shell(), test_url)); | 504 ASSERT_TRUE(NavigateToURL(shell(), test_url)); |
| 509 { | 505 { |
| 510 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 506 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 511 ASSERT_TRUE(content::ExecuteScript( | 507 ASSERT_TRUE( |
| 512 shell(), | 508 ExecuteScript(shell(), |
| 513 "var a = document.createElement('a'); a.href='#foo';" | 509 "var a = document.createElement('a'); a.href='#foo';" |
| 514 "document.body.appendChild(a); a.click();")); | 510 "document.body.appendChild(a); a.click();")); |
| 515 navigation_observer.Wait(); | 511 navigation_observer.Wait(); |
| 516 } | 512 } |
| 517 | 513 |
| 518 GetManifestAndWait(); | 514 GetManifestAndWait(); |
| 519 EXPECT_FALSE(manifest().IsEmpty()); | 515 EXPECT_FALSE(manifest().IsEmpty()); |
| 520 EXPECT_FALSE(manifest_url().is_empty()); | 516 EXPECT_FALSE(manifest_url().is_empty()); |
| 521 EXPECT_EQ(0u, console_error_count()); | 517 EXPECT_EQ(0u, console_error_count()); |
| 522 ASSERT_EQ(1u, reported_manifest_urls().size()); | 518 ASSERT_EQ(1u, reported_manifest_urls().size()); |
| 523 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); | 519 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); |
| 524 ASSERT_EQ(2u, manifests_reported_when_favicon_url_updated().size()); | 520 ASSERT_EQ(2u, manifests_reported_when_favicon_url_updated().size()); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); | 639 EXPECT_EQ(manifest_url(), reported_manifest_urls()[0]); |
| 644 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); | 640 ASSERT_EQ(1u, manifests_reported_when_favicon_url_updated().size()); |
| 645 EXPECT_EQ(1u, manifests_reported_when_favicon_url_updated()[0]); | 641 EXPECT_EQ(1u, manifests_reported_when_favicon_url_updated()[0]); |
| 646 | 642 |
| 647 // The custom embedded test server will fill set the name to 'no cookies' if | 643 // The custom embedded test server will fill set the name to 'no cookies' if |
| 648 // it did not find cookies. | 644 // it did not find cookies. |
| 649 EXPECT_TRUE(base::EqualsASCII(manifest().name.string(), "no cookies")); | 645 EXPECT_TRUE(base::EqualsASCII(manifest().name.string(), "no cookies")); |
| 650 } | 646 } |
| 651 | 647 |
| 652 } // namespace content | 648 } // namespace content |
| OLD | NEW |