| # 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. |