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 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 // static | 563 // static |
564 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int routing_id) { | 564 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int routing_id) { |
565 RoutingIDFrameMap::iterator iter = | 565 RoutingIDFrameMap::iterator iter = |
566 g_routing_id_frame_map.Get().find(routing_id); | 566 g_routing_id_frame_map.Get().find(routing_id); |
567 if (iter != g_routing_id_frame_map.Get().end()) | 567 if (iter != g_routing_id_frame_map.Get().end()) |
568 return iter->second; | 568 return iter->second; |
569 return NULL; | 569 return NULL; |
570 } | 570 } |
571 | 571 |
572 // static | 572 // static |
573 RenderFrameImpl* RenderFrameImpl::CreateMainFrame(RenderViewImpl* render_view, | 573 RenderFrameImpl* RenderFrameImpl::CreateMainFrame( |
574 int32 routing_id) { | 574 RenderViewImpl* render_view, |
| 575 int32_t routing_id, |
| 576 int32_t widget_routing_id, |
| 577 bool hidden, |
| 578 const blink::WebScreenInfo& screen_info, |
| 579 CompositorDependencies* compositor_deps) { |
| 580 // A main frame RenderFrame must have a RenderWidget. |
| 581 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id); |
| 582 |
575 RenderFrameImpl* render_frame = | 583 RenderFrameImpl* render_frame = |
576 RenderFrameImpl::Create(render_view, routing_id); | 584 RenderFrameImpl::Create(render_view, routing_id); |
577 WebLocalFrame* web_frame = | 585 WebLocalFrame* web_frame = |
578 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); | 586 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); |
579 render_frame->SetWebFrame(web_frame); | 587 render_frame->SetWebFrame(web_frame); |
580 render_view->webview()->setMainFrame(web_frame); | 588 render_view->webview()->setMainFrame(web_frame); |
| 589 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
| 590 widget_routing_id, hidden, screen_info, compositor_deps, web_frame); |
| 591 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
| 592 // WasShown and WasHidden, separating page-level visibility from |
| 593 // frame-level visibility. |
| 594 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 |
| 595 DCHECK_EQ(render_view, render_frame->render_widget_) |
| 596 << "Main frame is no longer reusing the RenderView as its widget! " |
| 597 << "Does the RenderFrame need to register itself with the RenderWidget?"; |
581 return render_frame; | 598 return render_frame; |
582 } | 599 } |
583 | 600 |
584 // static | 601 // static |
585 void RenderFrameImpl::CreateFrame( | 602 void RenderFrameImpl::CreateFrame( |
586 int routing_id, | 603 int routing_id, |
587 int proxy_routing_id, | 604 int proxy_routing_id, |
588 int opener_routing_id, | 605 int opener_routing_id, |
589 int parent_routing_id, | 606 int parent_routing_id, |
590 int previous_sibling_routing_id, | 607 int previous_sibling_routing_id, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), | 643 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), |
627 replicated_state.sandbox_flags); | 644 replicated_state.sandbox_flags); |
628 } | 645 } |
629 render_frame->SetWebFrame(web_frame); | 646 render_frame->SetWebFrame(web_frame); |
630 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); | 647 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); |
631 | 648 |
632 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); | 649 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); |
633 web_frame->setOpener(opener); | 650 web_frame->setOpener(opener); |
634 | 651 |
635 if (widget_params.routing_id != MSG_ROUTING_NONE) { | 652 if (widget_params.routing_id != MSG_ROUTING_NONE) { |
636 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 653 CHECK_IMPLIES(web_frame->parent(), |
| 654 SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
637 render_frame->render_widget_ = RenderWidget::CreateForFrame( | 655 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
638 widget_params.routing_id, widget_params.hidden, | 656 widget_params.routing_id, widget_params.hidden, |
639 render_frame->render_view_->screen_info(), compositor_deps, web_frame); | 657 render_frame->render_view_->screen_info(), compositor_deps, web_frame); |
640 // TODO(kenrb): Observing shouldn't be necessary when we sort out | 658 // TODO(avi): The main frame re-uses the RenderViewImpl as its widget, so |
641 // WasShown and WasHidden, separating page-level visibility from | 659 // avoid double-registering the frame as an observer. |
642 // frame-level visibility. | 660 // https://crbug.com/545684 |
643 render_frame->render_widget_->RegisterRenderFrame(render_frame); | 661 if (web_frame->parent()) { |
| 662 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
| 663 // WasShown and WasHidden, separating page-level visibility from |
| 664 // frame-level visibility. |
| 665 render_frame->render_widget_->RegisterRenderFrame(render_frame); |
| 666 } |
644 } | 667 } |
645 | 668 |
646 render_frame->Initialize(); | 669 render_frame->Initialize(); |
647 } | 670 } |
648 | 671 |
649 // static | 672 // static |
650 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { | 673 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { |
651 return RenderFrameImpl::FromWebFrame(web_frame); | 674 return RenderFrameImpl::FromWebFrame(web_frame); |
652 } | 675 } |
653 | 676 |
(...skipping 3318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3972 } | 3995 } |
3973 | 3996 |
3974 void RenderFrameImpl::WasHidden() { | 3997 void RenderFrameImpl::WasHidden() { |
3975 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); | 3998 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); |
3976 } | 3999 } |
3977 | 4000 |
3978 void RenderFrameImpl::WasShown() { | 4001 void RenderFrameImpl::WasShown() { |
3979 // TODO(kenrb): Need to figure out how to do this better. Should | 4002 // TODO(kenrb): Need to figure out how to do this better. Should |
3980 // VisibilityState remain a page-level concept or move to frames? | 4003 // VisibilityState remain a page-level concept or move to frames? |
3981 // The semantics of 'Show' might have to change here. | 4004 // The semantics of 'Show' might have to change here. |
3982 if (render_widget_) { | 4005 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 |
| 4006 DCHECK_IMPLIES(IsMainFrame(), render_widget_.get() == render_view_.get()) |
| 4007 << "The main render frame is no longer reusing the RenderView as its " |
| 4008 << "RenderWidget!"; |
| 4009 if (render_widget_ && render_view_.get() != render_widget_.get()) { |
3983 static_cast<blink::WebFrameWidget*>(render_widget_->webwidget())-> | 4010 static_cast<blink::WebFrameWidget*>(render_widget_->webwidget())-> |
3984 setVisibilityState(blink::WebPageVisibilityStateVisible, false); | 4011 setVisibilityState(blink::WebPageVisibilityStateVisible, false); |
3985 } | 4012 } |
3986 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); | 4013 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); |
3987 } | 4014 } |
3988 | 4015 |
3989 void RenderFrameImpl::WidgetWillClose() { | 4016 void RenderFrameImpl::WidgetWillClose() { |
3990 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose()); | 4017 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose()); |
3991 } | 4018 } |
3992 | 4019 |
(...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5253 mojo::ServiceProviderPtr service_provider; | 5280 mojo::ServiceProviderPtr service_provider; |
5254 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 5281 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
5255 request->url = mojo::String::From(url); | 5282 request->url = mojo::String::From(url); |
5256 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), | 5283 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), |
5257 nullptr, nullptr, | 5284 nullptr, nullptr, |
5258 base::Bind(&OnGotContentHandlerID)); | 5285 base::Bind(&OnGotContentHandlerID)); |
5259 return service_provider.Pass(); | 5286 return service_provider.Pass(); |
5260 } | 5287 } |
5261 | 5288 |
5262 } // namespace content | 5289 } // namespace content |
OLD | NEW |