| # What is RenderDocument? | |
| ## TL;DR | |
| Chrome currently switches to a new RenderFrameHost | |
| when loading a new document | |
| if the render process is different to the previous one. | |
| The RenderDocument project is about making the switch to happen unconditionally. | |
| This: | |
| * Eliminates the logic for navigating inside the same RenderFrameHost | |
| * Makes RenderFrameHost in the browser process 1:1 with the Document. | |
| * Prevents security bugs, | |
| e.g. reusing the data/capabilities from the wrong document. | |
| ## Details | |
| Previously when we navigate a frame from one page to another, | |
| the second page may appear in a new RenderFrame | |
| or we may reuse the existing RenderFrame to load the second page. | |
| Which happens depends on many things, | |
| including which site-isolation policy we are following | |
| and whether the pages are from the same site or not. | |
| With RenderDocument, | |
| the second page will always use a new RenderFrame | |
| (excluding navigation within a document). | |
| Also when reloading a crashed frame | |
| we reused the browser-side RenderFrameHost. | |
| With RenderDocument we create a new RenderFrameHost | |
| for crashed frames. | |
| ## Read more | |
| https://crbug.com/936696 | |
| [design doc](https://docs.google.com/document/d/1C2VKkFRSc0kdmqjKan1G4NlNlxWZqE4Wam41FNMgnmA) | |
| [high-level view of the work needed](https://docs.google.com/document/d/1UzVOmTj2IJ0ecz7CZicTK6ow2rr9wgLTGfY5hjyLmT4) | |
| [discussion of how we can land it safely](https://docs.google.com/document/d/1ZHWWEYT1L5Zgh2lpC7DHXXZjKcptI877KKOqjqxE2Ns) | |
| # Stages | |
| We have 3 stages that are behind flags. | |
| 1. crashed-frames: | |
| A new `RenderFrameHost` is used for reloading a crashed document. | |
| 2. subframes: | |
| A new `RenderFrameHost` is used for every nested document. | |
| 3. main frames: | |
| A new `RenderFrameHost` is used for every document. | |
| # Test changes | |
| ## RenderFrameHost reference becomes invalid | |
| Enabling this for subframes and main frames causes many tests to fail. | |
| It is common for tests to get a reference to a RenderFrameHost | |
| and then navigate that frame, | |
| assuming that the reference will remain valid. | |
| This assumption is no longer valid. | |
| The test needs to get a reference to the new RenderFrameHost, | |
| e.g. by traversing the frame tree again. |