| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/testing/sim/SimRequest.h" |
| #include "core/testing/sim/SimTest.h" |
| #include "platform/testing/UnitTestHelpers.h" |
| |
| namespace blink { |
| |
| using WindowProxyTest = SimTest; |
| |
| // Tests that a WindowProxy is reinitialized after a navigation, even if the new |
| // Document does not use any scripting. |
| TEST_F(WindowProxyTest, ReinitializedAfterNavigation) { |
| // TODO(dcheng): It's nicer to use TestingPlatformSupportWithMockScheduler, |
| // but that leads to random DCHECKs in loading code. |
| |
| SimRequest main_resource("https://example.com/index.html", "text/html"); |
| LoadURL("https://example.com/index.html"); |
| main_resource.Complete( |
| "<!DOCTYPE html>" |
| "<html><head><script>" |
| "var childWindow;" |
| "function runTest() {" |
| " childWindow = window[0];" |
| " document.querySelector('iframe').onload = runTest2;" |
| " childWindow.location = 'data:text/plain,Initial.';" |
| "}" |
| "function runTest2() {" |
| " try {" |
| " childWindow.location = 'data:text/plain,Final.';" |
| " console.log('PASSED');" |
| " } catch (e) {" |
| " console.log('FAILED');" |
| " }" |
| " document.querySelector('iframe').onload = null;" |
| "}" |
| "</script></head><body onload='runTest()'>" |
| "<iframe></iframe></body></html>"); |
| |
| // Wait for the first data: URL to load |
| testing::RunPendingTasks(); |
| |
| // Wait for the second data: URL to load. |
| testing::RunPendingTasks(); |
| |
| ASSERT_GT(ConsoleMessages().size(), 0U); |
| EXPECT_EQ("PASSED", ConsoleMessages()[0]); |
| } |
| } |