OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 // static | 558 // static |
559 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int routing_id) { | 559 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int routing_id) { |
560 RoutingIDFrameMap::iterator iter = | 560 RoutingIDFrameMap::iterator iter = |
561 g_routing_id_frame_map.Get().find(routing_id); | 561 g_routing_id_frame_map.Get().find(routing_id); |
562 if (iter != g_routing_id_frame_map.Get().end()) | 562 if (iter != g_routing_id_frame_map.Get().end()) |
563 return iter->second; | 563 return iter->second; |
564 return NULL; | 564 return NULL; |
565 } | 565 } |
566 | 566 |
567 // static | 567 // static |
568 RenderFrameImpl* RenderFrameImpl::CreateMainFrame(RenderViewImpl* render_view, | 568 RenderFrameImpl* RenderFrameImpl::CreateMainFrame( |
569 int32 routing_id) { | 569 RenderViewImpl* render_view, |
| 570 int32_t routing_id, |
| 571 int32_t widget_routing_id, |
| 572 bool hidden, |
| 573 const blink::WebScreenInfo& screen_info, |
| 574 CompositorDependencies* compositor_deps) { |
| 575 // A main frame RenderFrame must have a RenderWidget. |
| 576 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id); |
| 577 |
570 RenderFrameImpl* render_frame = | 578 RenderFrameImpl* render_frame = |
571 RenderFrameImpl::Create(render_view, routing_id); | 579 RenderFrameImpl::Create(render_view, routing_id); |
572 WebLocalFrame* web_frame = | 580 WebLocalFrame* web_frame = |
573 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); | 581 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); |
574 render_frame->SetWebFrame(web_frame); | 582 render_frame->SetWebFrame(web_frame); |
575 render_view->webview()->setMainFrame(web_frame); | 583 render_view->webview()->setMainFrame(web_frame); |
| 584 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
| 585 widget_routing_id, hidden, screen_info, compositor_deps, web_frame); |
| 586 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
| 587 // WasShown and WasHidden, separating page-level visibility from |
| 588 // frame-level visibility. |
| 589 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 |
| 590 DCHECK_EQ(render_view, render_frame->render_widget_) |
| 591 << "Main frame is no longer reusing the RenderView as its widget! " |
| 592 << "Does the RenderFrame need to register itself with the RenderWidget?"; |
576 return render_frame; | 593 return render_frame; |
577 } | 594 } |
578 | 595 |
579 // static | 596 // static |
580 void RenderFrameImpl::CreateFrame( | 597 void RenderFrameImpl::CreateFrame( |
581 int routing_id, | 598 int routing_id, |
582 int proxy_routing_id, | 599 int proxy_routing_id, |
583 int opener_routing_id, | 600 int opener_routing_id, |
584 int parent_routing_id, | 601 int parent_routing_id, |
585 int previous_sibling_routing_id, | 602 int previous_sibling_routing_id, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), | 638 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), |
622 replicated_state.sandbox_flags); | 639 replicated_state.sandbox_flags); |
623 } | 640 } |
624 render_frame->SetWebFrame(web_frame); | 641 render_frame->SetWebFrame(web_frame); |
625 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); | 642 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); |
626 | 643 |
627 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); | 644 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); |
628 web_frame->setOpener(opener); | 645 web_frame->setOpener(opener); |
629 | 646 |
630 if (widget_params.routing_id != MSG_ROUTING_NONE) { | 647 if (widget_params.routing_id != MSG_ROUTING_NONE) { |
631 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 648 CHECK_IMPLIES(web_frame->parent(), |
| 649 SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
632 render_frame->render_widget_ = RenderWidget::CreateForFrame( | 650 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
633 widget_params.routing_id, widget_params.hidden, | 651 widget_params.routing_id, widget_params.hidden, |
634 render_frame->render_view_->screen_info(), compositor_deps, web_frame); | 652 render_frame->render_view_->screen_info(), compositor_deps, web_frame); |
635 // TODO(kenrb): Observing shouldn't be necessary when we sort out | 653 // TODO(avi): The main frame re-uses the RenderViewImpl as its widget, so |
636 // WasShown and WasHidden, separating page-level visibility from | 654 // avoid double-registering the frame as an observer. |
637 // frame-level visibility. | 655 // https://crbug.com/545684 |
638 render_frame->render_widget_->RegisterRenderFrame(render_frame); | 656 if (web_frame->parent()) { |
| 657 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
| 658 // WasShown and WasHidden, separating page-level visibility from |
| 659 // frame-level visibility. |
| 660 render_frame->render_widget_->RegisterRenderFrame(render_frame); |
| 661 } |
639 } | 662 } |
640 | 663 |
641 render_frame->Initialize(); | 664 render_frame->Initialize(); |
642 } | 665 } |
643 | 666 |
644 // static | 667 // static |
645 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { | 668 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { |
646 return RenderFrameImpl::FromWebFrame(web_frame); | 669 return RenderFrameImpl::FromWebFrame(web_frame); |
647 } | 670 } |
648 | 671 |
(...skipping 3289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3938 } | 3961 } |
3939 | 3962 |
3940 void RenderFrameImpl::WasHidden() { | 3963 void RenderFrameImpl::WasHidden() { |
3941 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); | 3964 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); |
3942 } | 3965 } |
3943 | 3966 |
3944 void RenderFrameImpl::WasShown() { | 3967 void RenderFrameImpl::WasShown() { |
3945 // TODO(kenrb): Need to figure out how to do this better. Should | 3968 // TODO(kenrb): Need to figure out how to do this better. Should |
3946 // VisibilityState remain a page-level concept or move to frames? | 3969 // VisibilityState remain a page-level concept or move to frames? |
3947 // The semantics of 'Show' might have to change here. | 3970 // The semantics of 'Show' might have to change here. |
3948 if (render_widget_) { | 3971 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 |
| 3972 DCHECK_IMPLIES(IsMainFrame(), render_widget_.get() == render_view_.get()) |
| 3973 << "The main render frame is no longer reusing the RenderView as its " |
| 3974 << "RenderWidget!"; |
| 3975 if (render_widget_ && render_view_.get() != render_widget_.get()) { |
3949 static_cast<blink::WebFrameWidget*>(render_widget_->webwidget())-> | 3976 static_cast<blink::WebFrameWidget*>(render_widget_->webwidget())-> |
3950 setVisibilityState(blink::WebPageVisibilityStateVisible, false); | 3977 setVisibilityState(blink::WebPageVisibilityStateVisible, false); |
3951 } | 3978 } |
3952 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); | 3979 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); |
3953 } | 3980 } |
3954 | 3981 |
3955 void RenderFrameImpl::WidgetWillClose() { | 3982 void RenderFrameImpl::WidgetWillClose() { |
3956 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose()); | 3983 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose()); |
3957 } | 3984 } |
3958 | 3985 |
(...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5219 mojo::ServiceProviderPtr service_provider; | 5246 mojo::ServiceProviderPtr service_provider; |
5220 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 5247 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
5221 request->url = mojo::String::From(url); | 5248 request->url = mojo::String::From(url); |
5222 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), | 5249 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), |
5223 nullptr, nullptr, | 5250 nullptr, nullptr, |
5224 base::Bind(&OnGotContentHandlerID)); | 5251 base::Bind(&OnGotContentHandlerID)); |
5225 return service_provider.Pass(); | 5252 return service_provider.Pass(); |
5226 } | 5253 } |
5227 | 5254 |
5228 } // namespace content | 5255 } // namespace content |
OLD | NEW |