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 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
560 // static | 560 // static |
561 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int routing_id) { | 561 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int routing_id) { |
562 RoutingIDFrameMap::iterator iter = | 562 RoutingIDFrameMap::iterator iter = |
563 g_routing_id_frame_map.Get().find(routing_id); | 563 g_routing_id_frame_map.Get().find(routing_id); |
564 if (iter != g_routing_id_frame_map.Get().end()) | 564 if (iter != g_routing_id_frame_map.Get().end()) |
565 return iter->second; | 565 return iter->second; |
566 return NULL; | 566 return NULL; |
567 } | 567 } |
568 | 568 |
569 // static | 569 // static |
570 RenderFrameImpl* RenderFrameImpl::CreateMainFrame(RenderViewImpl* render_view, | 570 RenderFrameImpl* RenderFrameImpl::CreateMainFrame( |
571 int32 routing_id) { | 571 RenderViewImpl* render_view, |
572 int32 routing_id, | |
573 int32 widget_routing_id, | |
574 bool hidden, | |
575 const blink::WebScreenInfo& screen_info, | |
576 CompositorDependencies* compositor_deps) { | |
577 // A main frame RenderFrame must have a RenderWidget. | |
578 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id); | |
579 | |
572 RenderFrameImpl* render_frame = | 580 RenderFrameImpl* render_frame = |
573 RenderFrameImpl::Create(render_view, routing_id); | 581 RenderFrameImpl::Create(render_view, routing_id); |
574 WebLocalFrame* web_frame = | 582 WebLocalFrame* web_frame = |
575 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); | 583 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); |
576 render_frame->SetWebFrame(web_frame); | 584 render_frame->SetWebFrame(web_frame); |
577 render_view->webview()->setMainFrame(web_frame); | 585 render_view->webview()->setMainFrame(web_frame); |
586 render_frame->render_widget_ = RenderWidget::CreateForFrame( | |
587 widget_routing_id, hidden, screen_info, compositor_deps, web_frame); | |
588 // TODO(kenrb): Observing shouldn't be necessary when we sort out | |
589 // WasShown and WasHidden, separating page-level visibility from | |
590 // frame-level visibility. | |
591 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 | |
592 DCHECK_EQ(render_view, render_frame->render_widget_) | |
593 << "Main frame is no longer reusing the RenderView as its widget! " | |
594 << "Does the RenderFrame need to register itself with the RenderWidget?"; | |
578 return render_frame; | 595 return render_frame; |
579 } | 596 } |
580 | 597 |
581 // static | 598 // static |
582 void RenderFrameImpl::CreateFrame( | 599 void RenderFrameImpl::CreateFrame( |
583 int routing_id, | 600 int routing_id, |
584 int proxy_routing_id, | 601 int proxy_routing_id, |
585 int opener_routing_id, | 602 int opener_routing_id, |
586 int parent_routing_id, | 603 int parent_routing_id, |
587 int previous_sibling_routing_id, | 604 int previous_sibling_routing_id, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
623 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), | 640 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), |
624 replicated_state.sandbox_flags); | 641 replicated_state.sandbox_flags); |
625 } | 642 } |
626 render_frame->SetWebFrame(web_frame); | 643 render_frame->SetWebFrame(web_frame); |
627 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); | 644 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); |
628 | 645 |
629 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); | 646 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); |
630 web_frame->setOpener(opener); | 647 web_frame->setOpener(opener); |
631 | 648 |
632 if (widget_params.routing_id != MSG_ROUTING_NONE) { | 649 if (widget_params.routing_id != MSG_ROUTING_NONE) { |
633 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 650 CHECK_IMPLIES(web_frame->parent(), |
651 SiteIsolationPolicy::AreCrossProcessFramesPossible()); | |
634 render_frame->render_widget_ = RenderWidget::CreateForFrame( | 652 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
635 widget_params.routing_id, widget_params.hidden, | 653 widget_params.routing_id, widget_params.hidden, |
636 render_frame->render_view_->screen_info(), compositor_deps, web_frame); | 654 render_frame->render_view_->screen_info(), compositor_deps, web_frame); |
637 // TODO(kenrb): Observing shouldn't be necessary when we sort out | 655 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
638 // WasShown and WasHidden, separating page-level visibility from | 656 // WasShown and WasHidden, separating page-level visibility from |
639 // frame-level visibility. | 657 // frame-level visibility. |
640 render_frame->render_widget_->RegisterRenderFrame(render_frame); | 658 render_frame->render_widget_->RegisterRenderFrame(render_frame); |
ncarter (slow)
2015/10/21 22:15:48
The error message in the DCHECK on line 592 sugges
dcheng
2015/10/21 23:46:51
The CHECK_IMPLIES is one of the bits of plumbing l
| |
641 } | 659 } |
642 | 660 |
643 render_frame->Initialize(); | 661 render_frame->Initialize(); |
644 } | 662 } |
645 | 663 |
646 // static | 664 // static |
647 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { | 665 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { |
648 return RenderFrameImpl::FromWebFrame(web_frame); | 666 return RenderFrameImpl::FromWebFrame(web_frame); |
649 } | 667 } |
650 | 668 |
(...skipping 3276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3927 } | 3945 } |
3928 | 3946 |
3929 void RenderFrameImpl::WasHidden() { | 3947 void RenderFrameImpl::WasHidden() { |
3930 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); | 3948 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); |
3931 } | 3949 } |
3932 | 3950 |
3933 void RenderFrameImpl::WasShown() { | 3951 void RenderFrameImpl::WasShown() { |
3934 // TODO(kenrb): Need to figure out how to do this better. Should | 3952 // TODO(kenrb): Need to figure out how to do this better. Should |
3935 // VisibilityState remain a page-level concept or move to frames? | 3953 // VisibilityState remain a page-level concept or move to frames? |
3936 // The semantics of 'Show' might have to change here. | 3954 // The semantics of 'Show' might have to change here. |
3937 if (render_widget_) { | 3955 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 |
3956 DCHECK_IMPLIES(IsMainFrame(), render_widget_.get() == render_view_.get()) | |
3957 << "The main render frame is no longer reusing the RenderView as its " | |
3958 << "RenderWidget!"; | |
3959 if (render_widget_ && render_view_.get() != render_widget_.get()) { | |
3938 static_cast<blink::WebFrameWidget*>(render_widget_->webwidget())-> | 3960 static_cast<blink::WebFrameWidget*>(render_widget_->webwidget())-> |
3939 setVisibilityState(blink::WebPageVisibilityStateVisible, false); | 3961 setVisibilityState(blink::WebPageVisibilityStateVisible, false); |
3940 } | 3962 } |
3941 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); | 3963 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); |
3942 } | 3964 } |
3943 | 3965 |
3944 void RenderFrameImpl::WidgetWillClose() { | 3966 void RenderFrameImpl::WidgetWillClose() { |
3945 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose()); | 3967 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose()); |
3946 } | 3968 } |
3947 | 3969 |
(...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5208 mojo::ServiceProviderPtr service_provider; | 5230 mojo::ServiceProviderPtr service_provider; |
5209 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 5231 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
5210 request->url = mojo::String::From(url); | 5232 request->url = mojo::String::From(url); |
5211 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), | 5233 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), |
5212 nullptr, nullptr, | 5234 nullptr, nullptr, |
5213 base::Bind(&OnGotContentHandlerID)); | 5235 base::Bind(&OnGotContentHandlerID)); |
5214 return service_provider.Pass(); | 5236 return service_provider.Pass(); |
5215 } | 5237 } |
5216 | 5238 |
5217 } // namespace content | 5239 } // namespace content |
OLD | NEW |