OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 7599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7610 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None); | 7610 popupLocalFrame->initializeToReplaceRemoteFrame(popupRemoteFrame, "", WebSan
dboxFlags::None); |
7611 popupRemoteFrame->swap(popupLocalFrame); | 7611 popupRemoteFrame->swap(popupLocalFrame); |
7612 | 7612 |
7613 // The initial document created during the remote-to-local swap should have | 7613 // The initial document created during the remote-to-local swap should have |
7614 // inherited its opener's SecurityOrigin. | 7614 // inherited its opener's SecurityOrigin. |
7615 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); | 7615 EXPECT_TRUE(mainFrame->securityOrigin().canAccess(popupView->mainFrame()->se
curityOrigin())); |
7616 | 7616 |
7617 popupView->close(); | 7617 popupView->close(); |
7618 } | 7618 } |
7619 | 7619 |
| 7620 TEST_F(WebFrameTest, SwapWithOpenerCycle) |
| 7621 { |
| 7622 // First, create a remote main frame with itself as the opener. |
| 7623 FrameTestHelpers::TestWebViewClient viewClient; |
| 7624 WebView* view = WebView::create(&viewClient); |
| 7625 FrameTestHelpers::TestWebRemoteFrameClient remoteClient; |
| 7626 WebRemoteFrame* remoteFrame = remoteClient.frame(); |
| 7627 view->setMainFrame(remoteFrame); |
| 7628 remoteFrame->setOpener(remoteFrame); |
| 7629 |
| 7630 // Now swap in a local frame. It shouldn't crash. |
| 7631 FrameTestHelpers::TestWebFrameClient localClient; |
| 7632 WebLocalFrame* localFrame = WebLocalFrame::create(WebTreeScopeType::Document
, &localClient); |
| 7633 localFrame->initializeToReplaceRemoteFrame(remoteFrame, "", WebSandboxFlags:
:None); |
| 7634 remoteFrame->swap(localFrame); |
| 7635 |
| 7636 // And the opener cycle should still be preserved. |
| 7637 EXPECT_EQ(localFrame, localFrame->opener()); |
| 7638 |
| 7639 view->close(); |
| 7640 } |
| 7641 |
7620 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { | 7642 class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { |
7621 public: | 7643 public: |
7622 explicit CommitTypeWebFrameClient() | 7644 explicit CommitTypeWebFrameClient() |
7623 : m_historyCommitType(WebHistoryInertCommit) | 7645 : m_historyCommitType(WebHistoryInertCommit) |
7624 { | 7646 { |
7625 } | 7647 } |
7626 | 7648 |
7627 void didCommitProvisionalLoad(WebLocalFrame*, const WebHistoryItem&, WebHist
oryCommitType historyCommitType) override | 7649 void didCommitProvisionalLoad(WebLocalFrame*, const WebHistoryItem&, WebHist
oryCommitType historyCommitType) override |
7628 { | 7650 { |
7629 m_historyCommitType = historyCommitType; | 7651 m_historyCommitType = historyCommitType; |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8276 EXPECT_TRUE(resource); | 8298 EXPECT_TRUE(resource); |
8277 EXPECT_NE(0, resource->loadFinishTime()); | 8299 EXPECT_NE(0, resource->loadFinishTime()); |
8278 | 8300 |
8279 DocumentLoader* loader = document->loader(); | 8301 DocumentLoader* loader = document->loader(); |
8280 | 8302 |
8281 EXPECT_TRUE(loader); | 8303 EXPECT_TRUE(loader); |
8282 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); | 8304 EXPECT_EQ(loader->timing().responseEnd(), resource->loadFinishTime()); |
8283 } | 8305 } |
8284 | 8306 |
8285 } // namespace blink | 8307 } // namespace blink |
OLD | NEW |