| 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 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 EXPECT_TRUE(manifest().IsEmpty()); | 240 EXPECT_TRUE(manifest().IsEmpty()); |
| 241 | 241 |
| 242 HasManifestAndWait(); | 242 HasManifestAndWait(); |
| 243 EXPECT_FALSE(has_manifest()); | 243 EXPECT_FALSE(has_manifest()); |
| 244 } | 244 } |
| 245 | 245 |
| 246 { | 246 { |
| 247 std::string manifest_url = | 247 std::string manifest_url = |
| 248 GetTestUrl("manifest", "dummy-manifest.json").spec(); | 248 GetTestUrl("manifest", "dummy-manifest.json").spec(); |
| 249 ASSERT_TRUE(content::ExecuteScript( | 249 ASSERT_TRUE(content::ExecuteScript( |
| 250 shell()->web_contents(), "setManifestTo('" + manifest_url + "')")); | 250 shell(), "setManifestTo('" + manifest_url + "')")); |
| 251 | 251 |
| 252 GetManifestAndWait(); | 252 GetManifestAndWait(); |
| 253 EXPECT_FALSE(manifest().IsEmpty()); | 253 EXPECT_FALSE(manifest().IsEmpty()); |
| 254 | 254 |
| 255 HasManifestAndWait(); | 255 HasManifestAndWait(); |
| 256 EXPECT_TRUE(has_manifest()); | 256 EXPECT_TRUE(has_manifest()); |
| 257 } | 257 } |
| 258 | 258 |
| 259 { | 259 { |
| 260 std::string manifest_url = | 260 std::string manifest_url = |
| 261 GetTestUrl("manifest", "empty-manifest.json").spec(); | 261 GetTestUrl("manifest", "empty-manifest.json").spec(); |
| 262 ASSERT_TRUE(content::ExecuteScript( | 262 ASSERT_TRUE(content::ExecuteScript( |
| 263 shell()->web_contents(), "setManifestTo('" + manifest_url + "')")); | 263 shell(), "setManifestTo('" + manifest_url + "')")); |
| 264 | 264 |
| 265 GetManifestAndWait(); | 265 GetManifestAndWait(); |
| 266 EXPECT_TRUE(manifest().IsEmpty()); | 266 EXPECT_TRUE(manifest().IsEmpty()); |
| 267 | 267 |
| 268 HasManifestAndWait(); | 268 HasManifestAndWait(); |
| 269 EXPECT_TRUE(has_manifest()); | 269 EXPECT_TRUE(has_manifest()); |
| 270 } | 270 } |
| 271 | 271 |
| 272 EXPECT_EQ(0u, console_error_count()); | 272 EXPECT_EQ(0u, console_error_count()); |
| 273 } | 273 } |
| 274 | 274 |
| 275 // If a page's manifest lives in a different origin, it should follow the CORS | 275 // If a page's manifest lives in a different origin, it should follow the CORS |
| 276 // rules and requesting the manifest should return an empty manifest (unless the | 276 // rules and requesting the manifest should return an empty manifest (unless the |
| 277 // response contains CORS headers). | 277 // response contains CORS headers). |
| 278 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) { | 278 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) { |
| 279 ASSERT_TRUE(embedded_test_server()->Start()); | 279 ASSERT_TRUE(embedded_test_server()->Start()); |
| 280 ASSERT_TRUE(cors_embedded_test_server()->Start()); | 280 ASSERT_TRUE(cors_embedded_test_server()->Start()); |
| 281 ASSERT_NE(embedded_test_server()->port(), | 281 ASSERT_NE(embedded_test_server()->port(), |
| 282 cors_embedded_test_server()->port()); | 282 cors_embedded_test_server()->port()); |
| 283 | 283 |
| 284 GURL test_url = | 284 GURL test_url = |
| 285 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); | 285 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); |
| 286 | 286 |
| 287 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 287 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 288 shell()->LoadURL(test_url); | 288 shell()->LoadURL(test_url); |
| 289 navigation_observer.Wait(); | 289 navigation_observer.Wait(); |
| 290 | 290 |
| 291 std::string manifest_url = cors_embedded_test_server()->GetURL( | 291 std::string manifest_url = cors_embedded_test_server()->GetURL( |
| 292 "/manifest/dummy-manifest.json").spec(); | 292 "/manifest/dummy-manifest.json").spec(); |
| 293 ASSERT_TRUE(content::ExecuteScript(shell()->web_contents(), | 293 ASSERT_TRUE( |
| 294 "setManifestTo('" + manifest_url + "')")); | 294 content::ExecuteScript(shell(), "setManifestTo('" + manifest_url + "')")); |
| 295 | 295 |
| 296 GetManifestAndWait(); | 296 GetManifestAndWait(); |
| 297 EXPECT_TRUE(manifest().IsEmpty()); | 297 EXPECT_TRUE(manifest().IsEmpty()); |
| 298 | 298 |
| 299 HasManifestAndWait(); | 299 HasManifestAndWait(); |
| 300 EXPECT_TRUE(has_manifest()); | 300 EXPECT_TRUE(has_manifest()); |
| 301 EXPECT_EQ(0u, console_error_count()); | 301 EXPECT_EQ(0u, console_error_count()); |
| 302 | 302 |
| 303 // The purpose of this second load is to make sure the first load is fully | 303 // The purpose of this second load is to make sure the first load is fully |
| 304 // finished. The first load will fail because of Access Control error but the | 304 // finished. The first load will fail because of Access Control error but the |
| 305 // underlying Blink loader will continue fetching the file. There is no | 305 // underlying Blink loader will continue fetching the file. There is no |
| 306 // reliable way to know when the fetch is finished from the browser test | 306 // reliable way to know when the fetch is finished from the browser test |
| 307 // except by fetching the same file from same origin, making it succeed when | 307 // except by fetching the same file from same origin, making it succeed when |
| 308 // it is actually fully loaded. | 308 // it is actually fully loaded. |
| 309 manifest_url = | 309 manifest_url = |
| 310 embedded_test_server()->GetURL("/manifest/dummy-manifest.json").spec(); | 310 embedded_test_server()->GetURL("/manifest/dummy-manifest.json").spec(); |
| 311 ASSERT_TRUE(content::ExecuteScript(shell()->web_contents(), | 311 ASSERT_TRUE( |
| 312 "setManifestTo('" + manifest_url + "')")); | 312 content::ExecuteScript(shell(), "setManifestTo('" + manifest_url + "')")); |
| 313 GetManifestAndWait(); | 313 GetManifestAndWait(); |
| 314 } | 314 } |
| 315 | 315 |
| 316 // If a page's manifest lives in a different origin, it should be accessible if | 316 // If a page's manifest lives in a different origin, it should be accessible if |
| 317 // it has valid access controls headers. | 317 // it has valid access controls headers. |
| 318 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifestWithAcessControls) { | 318 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifestWithAcessControls) { |
| 319 ASSERT_TRUE(embedded_test_server()->Start()); | 319 ASSERT_TRUE(embedded_test_server()->Start()); |
| 320 ASSERT_TRUE(cors_embedded_test_server()->Start()); | 320 ASSERT_TRUE(cors_embedded_test_server()->Start()); |
| 321 ASSERT_NE(embedded_test_server()->port(), | 321 ASSERT_NE(embedded_test_server()->port(), |
| 322 cors_embedded_test_server()->port()); | 322 cors_embedded_test_server()->port()); |
| 323 | 323 |
| 324 GURL test_url = | 324 GURL test_url = |
| 325 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); | 325 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); |
| 326 | 326 |
| 327 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 327 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 328 shell()->LoadURL(test_url); | 328 shell()->LoadURL(test_url); |
| 329 navigation_observer.Wait(); | 329 navigation_observer.Wait(); |
| 330 | 330 |
| 331 std::string manifest_url = cors_embedded_test_server()->GetURL( | 331 std::string manifest_url = cors_embedded_test_server()->GetURL( |
| 332 "/manifest/manifest-cors.json").spec(); | 332 "/manifest/manifest-cors.json").spec(); |
| 333 ASSERT_TRUE(content::ExecuteScript(shell()->web_contents(), | 333 ASSERT_TRUE( |
| 334 "setManifestTo('" + manifest_url + "')")); | 334 content::ExecuteScript(shell(), "setManifestTo('" + manifest_url + "')")); |
| 335 | 335 |
| 336 GetManifestAndWait(); | 336 GetManifestAndWait(); |
| 337 EXPECT_FALSE(manifest().IsEmpty()); | 337 EXPECT_FALSE(manifest().IsEmpty()); |
| 338 | 338 |
| 339 HasManifestAndWait(); | 339 HasManifestAndWait(); |
| 340 EXPECT_TRUE(has_manifest()); | 340 EXPECT_TRUE(has_manifest()); |
| 341 EXPECT_EQ(0u, console_error_count()); | 341 EXPECT_EQ(0u, console_error_count()); |
| 342 } | 342 } |
| 343 | 343 |
| 344 // If a page's manifest is in an insecure origin while the page is in a secure | 344 // If a page's manifest is in an insecure origin while the page is in a secure |
| 345 // origin, requesting the manifest should return the empty manifest. | 345 // origin, requesting the manifest should return the empty manifest. |
| 346 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) { | 346 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) { |
| 347 std::unique_ptr<net::EmbeddedTestServer> https_server( | 347 std::unique_ptr<net::EmbeddedTestServer> https_server( |
| 348 new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); | 348 new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); |
| 349 https_server->ServeFilesFromSourceDirectory("content/test/data"); | 349 https_server->ServeFilesFromSourceDirectory("content/test/data"); |
| 350 | 350 |
| 351 ASSERT_TRUE(embedded_test_server()->Start()); | 351 ASSERT_TRUE(embedded_test_server()->Start()); |
| 352 ASSERT_TRUE(https_server->Start()); | 352 ASSERT_TRUE(https_server->Start()); |
| 353 | 353 |
| 354 GURL test_url = | 354 GURL test_url = |
| 355 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); | 355 embedded_test_server()->GetURL("/manifest/dynamic-manifest.html"); |
| 356 | 356 |
| 357 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 357 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 358 shell()->LoadURL(test_url); | 358 shell()->LoadURL(test_url); |
| 359 navigation_observer.Wait(); | 359 navigation_observer.Wait(); |
| 360 | 360 |
| 361 std::string manifest_url = | 361 std::string manifest_url = |
| 362 https_server->GetURL("/manifest/dummy-manifest.json").spec(); | 362 https_server->GetURL("/manifest/dummy-manifest.json").spec(); |
| 363 ASSERT_TRUE(content::ExecuteScript(shell()->web_contents(), | 363 ASSERT_TRUE( |
| 364 "setManifestTo('" + manifest_url + "')")); | 364 content::ExecuteScript(shell(), "setManifestTo('" + manifest_url + "')")); |
| 365 | 365 |
| 366 GetManifestAndWait(); | 366 GetManifestAndWait(); |
| 367 EXPECT_TRUE(manifest().IsEmpty()); | 367 EXPECT_TRUE(manifest().IsEmpty()); |
| 368 | 368 |
| 369 HasManifestAndWait(); | 369 HasManifestAndWait(); |
| 370 EXPECT_TRUE(has_manifest()); | 370 EXPECT_TRUE(has_manifest()); |
| 371 EXPECT_EQ(0u, console_error_count()); | 371 EXPECT_EQ(0u, console_error_count()); |
| 372 } | 372 } |
| 373 | 373 |
| 374 // If a page's manifest has some parsing errors, they should show up in the | 374 // If a page's manifest has some parsing errors, they should show up in the |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 | 434 |
| 435 { | 435 { |
| 436 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 436 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 437 shell()->LoadURL(test_url); | 437 shell()->LoadURL(test_url); |
| 438 navigation_observer.Wait(); | 438 navigation_observer.Wait(); |
| 439 } | 439 } |
| 440 | 440 |
| 441 { | 441 { |
| 442 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 442 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 443 ASSERT_TRUE(content::ExecuteScript( | 443 ASSERT_TRUE(content::ExecuteScript( |
| 444 shell()->web_contents(), | 444 shell(), "history.pushState({foo: \"bar\"}, 'page', 'page.html');")); |
| 445 "history.pushState({foo: \"bar\"}, 'page', 'page.html');")); | |
| 446 navigation_observer.Wait(); | 445 navigation_observer.Wait(); |
| 447 } | 446 } |
| 448 | 447 |
| 449 GetManifestAndWait(); | 448 GetManifestAndWait(); |
| 450 EXPECT_FALSE(manifest().IsEmpty()); | 449 EXPECT_FALSE(manifest().IsEmpty()); |
| 451 | 450 |
| 452 HasManifestAndWait(); | 451 HasManifestAndWait(); |
| 453 EXPECT_TRUE(has_manifest()); | 452 EXPECT_TRUE(has_manifest()); |
| 454 EXPECT_EQ(0u, console_error_count()); | 453 EXPECT_EQ(0u, console_error_count()); |
| 455 } | 454 } |
| 456 | 455 |
| 457 // If a page has a manifest and is navigated using an anchor (ie. same page), it | 456 // If a page has a manifest and is navigated using an anchor (ie. same page), it |
| 458 // should keep its manifest state. | 457 // should keep its manifest state. |
| 459 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, AnchorNavigation) { | 458 IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, AnchorNavigation) { |
| 460 ASSERT_TRUE(embedded_test_server()->Start()); | 459 ASSERT_TRUE(embedded_test_server()->Start()); |
| 461 GURL test_url = | 460 GURL test_url = |
| 462 embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); | 461 embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); |
| 463 | 462 |
| 464 { | 463 { |
| 465 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 464 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 466 shell()->LoadURL(test_url); | 465 shell()->LoadURL(test_url); |
| 467 navigation_observer.Wait(); | 466 navigation_observer.Wait(); |
| 468 } | 467 } |
| 469 | 468 |
| 470 { | 469 { |
| 471 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); | 470 TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
| 472 ASSERT_TRUE(content::ExecuteScript( | 471 ASSERT_TRUE(content::ExecuteScript( |
| 473 shell()->web_contents(), | 472 shell(), |
| 474 "var a = document.createElement('a'); a.href='#foo';" | 473 "var a = document.createElement('a'); a.href='#foo';" |
| 475 "document.body.appendChild(a); a.click();")); | 474 "document.body.appendChild(a); a.click();")); |
| 476 navigation_observer.Wait(); | 475 navigation_observer.Wait(); |
| 477 } | 476 } |
| 478 | 477 |
| 479 GetManifestAndWait(); | 478 GetManifestAndWait(); |
| 480 EXPECT_FALSE(manifest().IsEmpty()); | 479 EXPECT_FALSE(manifest().IsEmpty()); |
| 481 EXPECT_EQ(0u, console_error_count()); | 480 EXPECT_EQ(0u, console_error_count()); |
| 482 | 481 |
| 483 HasManifestAndWait(); | 482 HasManifestAndWait(); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 HasManifestAndWait(); | 599 HasManifestAndWait(); |
| 601 EXPECT_TRUE(has_manifest()); | 600 EXPECT_TRUE(has_manifest()); |
| 602 EXPECT_EQ(0u, console_error_count()); | 601 EXPECT_EQ(0u, console_error_count()); |
| 603 | 602 |
| 604 // The custom embedded test server will fill set the name to 'no cookies' if | 603 // The custom embedded test server will fill set the name to 'no cookies' if |
| 605 // it did not find cookies. | 604 // it did not find cookies. |
| 606 EXPECT_TRUE(base::EqualsASCII(manifest().name.string(), "no cookies")); | 605 EXPECT_TRUE(base::EqualsASCII(manifest().name.string(), "no cookies")); |
| 607 } | 606 } |
| 608 | 607 |
| 609 } // namespace content | 608 } // namespace content |
| OLD | NEW |