It's a bit awkward that it's maintained in web right now: it means we need extra plumbing for a core frame to figure out its parent frame, etc, we need to expose the frame tree to the embedder in a very direct way, maintaining openers needs to be at the web layer, along with the awkward tracing involved (since WebFrame itself inherit from GarbageCollected).
We can simplify this by:
1. Removing AddChild()/RemoveChild() etc from the public API and exposing a WebLocalFrame::CreateChild to match WebRemoteFrame::CreateLocalChild and WebRemoteFrame::CreateRemoteChild.
2. Change frame detach to automatically remove the frame from the frame tree rather than relying on the embedder to do it in WebFrameClient::FrameDetached().
3. Construct blink::Frame at the same time as blink::WebFrame. This will require changing the way we set the main frame: instead of doing it in the Frame constructor, we can have WebView::SetMainFrame() set the main frame, while the various Web*Frame::Create*Child methods will attach the frame to the frame owner.
4. Move the frame tree itself into blink::Frame and remove the plumbing in the Web layer.
Comment 1 by bugdroid1@chromium.org
, May 29 2017