WebLocalFrame* WebRemoteFrameImpl::createLocalChild(WebTreeScopeType scope, const WebString& name, const WebString& uniqueName, WebSandboxFlags sandboxFlags, WebFrameClient* client, WebFrame* previousSibling, const WebFrameOwnerProperties& frameOwnerProperties, WebFrame* opener) { WebLocalFrameImpl* child = WebLocalFrameImpl::create(scope, client, opener); insertAfter(child, previousSibling); RawPtr<RemoteFrameOwner> owner = RemoteFrameOwner::create(static_cast<SandboxFlags>(sandboxFlags), frameOwnerProperties); // FIXME: currently this calls LocalFrame::init() on the created LocalFrame, which may // result in the browser observing two navigations to about:blank (one from the initial // frame creation, and one from swapping it into the remote process). FrameLoader might // need a special initialization function for this case to avoid that duplicate navigation. child->initializeCoreFrame(frame()->host(), owner.get(), name, uniqueName); // Partially related with the above FIXME--the init() call may trigger JS dispatch. However, // if the parent is remote, it should never be detached synchronously... DCHECK(child->frame()); return child; }
WebLocalFrame* WebRemoteFrameImpl::createLocalChild(WebTreeScopeType scope, const WebString& name, WebSandboxFlags sandboxFlags, WebFrameClient* client, WebFrame* previousSibling, const WebFrameOwnerProperties& frameOwnerProperties) { WebLocalFrameImpl* child = toWebLocalFrameImpl(WebLocalFrame::create(scope, client)); WillBeHeapHashMap<WebFrame*, OwnPtrWillBeMember<FrameOwner>>::AddResult result = m_ownersForChildren.add(child, RemoteBridgeFrameOwner::create(child, static_cast<SandboxFlags>(sandboxFlags), frameOwnerProperties)); insertAfter(child, previousSibling); // FIXME: currently this calls LocalFrame::init() on the created LocalFrame, which may // result in the browser observing two navigations to about:blank (one from the initial // frame creation, and one from swapping it into the remote process). FrameLoader might // need a special initialization function for this case to avoid that duplicate navigation. child->initializeCoreFrame(frame()->host(), result.storedValue->value.get(), name, nullAtom); // Partially related with the above FIXME--the init() call may trigger JS dispatch. However, // if the parent is remote, it should never be detached synchronously... ASSERT(child->frame()); return child; }