OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "web/WebRemoteFrameImpl.h" | 5 #include "web/WebRemoteFrameImpl.h" |
6 | 6 |
7 #include "bindings/core/v8/WindowProxy.h" | 7 #include "bindings/core/v8/WindowProxy.h" |
8 #include "core/dom/Fullscreen.h" | 8 #include "core/dom/Fullscreen.h" |
9 #include "core/dom/RemoteSecurityContext.h" | 9 #include "core/dom/RemoteSecurityContext.h" |
10 #include "core/dom/SecurityContext.h" | 10 #include "core/dom/SecurityContext.h" |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 WebFrame* previous_sibling, | 326 WebFrame* previous_sibling, |
327 const WebParsedFeaturePolicy& container_policy, | 327 const WebParsedFeaturePolicy& container_policy, |
328 const WebFrameOwnerProperties& frame_owner_properties, | 328 const WebFrameOwnerProperties& frame_owner_properties, |
329 WebFrame* opener) { | 329 WebFrame* opener) { |
330 WebLocalFrameImpl* child = WebLocalFrameImpl::Create( | 330 WebLocalFrameImpl* child = WebLocalFrameImpl::Create( |
331 scope, client, interface_provider, interface_registry, opener); | 331 scope, client, interface_provider, interface_registry, opener); |
332 InsertAfter(child, previous_sibling); | 332 InsertAfter(child, previous_sibling); |
333 RemoteFrameOwner* owner = | 333 RemoteFrameOwner* owner = |
334 RemoteFrameOwner::Create(static_cast<SandboxFlags>(sandbox_flags), | 334 RemoteFrameOwner::Create(static_cast<SandboxFlags>(sandbox_flags), |
335 container_policy, frame_owner_properties); | 335 container_policy, frame_owner_properties); |
336 // FIXME: currently this calls LocalFrame::init() on the created LocalFrame, | |
337 // which may result in the browser observing two navigations to about:blank | |
338 // (one from the initial frame creation, and one from swapping it into the | |
339 // remote process). FrameLoader might need a special initialization function | |
340 // for this case to avoid that duplicate navigation. | |
341 child->InitializeCoreFrame(*GetFrame()->GetPage(), owner, name); | 336 child->InitializeCoreFrame(*GetFrame()->GetPage(), owner, name); |
342 // Partially related with the above FIXME--the init() call may trigger JS | |
343 // dispatch. However, | |
344 // if the parent is remote, it should never be detached synchronously... | |
345 DCHECK(child->GetFrame()); | 337 DCHECK(child->GetFrame()); |
346 return child; | 338 return child; |
347 } | 339 } |
348 | 340 |
349 void WebRemoteFrameImpl::InitializeCoreFrame(Page& page, | 341 void WebRemoteFrameImpl::InitializeCoreFrame(Page& page, |
350 FrameOwner* owner, | 342 FrameOwner* owner, |
351 const AtomicString& name) { | 343 const AtomicString& name) { |
352 SetCoreFrame(RemoteFrame::Create(frame_client_.Get(), page, owner)); | 344 SetCoreFrame(RemoteFrame::Create(frame_client_.Get(), page, owner)); |
353 GetFrame()->CreateView(); | 345 GetFrame()->CreateView(); |
354 frame_->Tree().SetName(name); | 346 frame_->Tree().SetName(name); |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 } | 524 } |
533 | 525 |
534 WebRemoteFrameImpl::WebRemoteFrameImpl(WebTreeScopeType scope, | 526 WebRemoteFrameImpl::WebRemoteFrameImpl(WebTreeScopeType scope, |
535 WebRemoteFrameClient* client) | 527 WebRemoteFrameClient* client) |
536 : WebRemoteFrameBase(scope), | 528 : WebRemoteFrameBase(scope), |
537 frame_client_(RemoteFrameClientImpl::Create(this)), | 529 frame_client_(RemoteFrameClientImpl::Create(this)), |
538 client_(client), | 530 client_(client), |
539 self_keep_alive_(this) {} | 531 self_keep_alive_(this) {} |
540 | 532 |
541 } // namespace blink | 533 } // namespace blink |
OLD | NEW |