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 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 | 535 |
536 // static | 536 // static |
537 void RenderFrameImpl::CreateFrame( | 537 void RenderFrameImpl::CreateFrame( |
538 int routing_id, | 538 int routing_id, |
539 int parent_routing_id, | 539 int parent_routing_id, |
540 int previous_sibling_routing_id, | 540 int previous_sibling_routing_id, |
541 int proxy_routing_id, | 541 int proxy_routing_id, |
542 const FrameReplicationState& replicated_state, | 542 const FrameReplicationState& replicated_state, |
543 CompositorDependencies* compositor_deps, | 543 CompositorDependencies* compositor_deps, |
544 const FrameMsg_NewFrame_WidgetParams& widget_params) { | 544 const FrameMsg_NewFrame_WidgetParams& widget_params) { |
| 545 // TODO(nasko): For now, this message is only sent for subframes, as the |
| 546 // top level frame is created when the RenderView is created through the |
| 547 // ViewMsg_New IPC. |
| 548 // CHECK_NE(MSG_ROUTING_NONE, parent_routing_id); |
| 549 |
| 550 LOG(ERROR) << "RF::CreateFrame:" |
| 551 << " routing_id:" << routing_id |
| 552 << " parent:" << parent_routing_id |
| 553 << " proxy:" << proxy_routing_id |
| 554 << " sibling:" << previous_sibling_routing_id; |
| 555 |
545 blink::WebLocalFrame* web_frame; | 556 blink::WebLocalFrame* web_frame; |
546 RenderFrameImpl* render_frame; | 557 RenderFrameImpl* render_frame; |
547 if (proxy_routing_id == MSG_ROUTING_NONE) { | 558 if (proxy_routing_id == MSG_ROUTING_NONE) { |
548 RenderFrameProxy* parent_proxy = | 559 RenderFrameProxy* parent_proxy = |
549 RenderFrameProxy::FromRoutingID(parent_routing_id); | 560 RenderFrameProxy::FromRoutingID(parent_routing_id); |
550 // If the browser is sending a valid parent routing id, it should already | 561 // If the browser is sending a valid parent routing id, it should already |
551 // be created and registered. | 562 // be created and registered. |
552 CHECK(parent_proxy); | 563 CHECK(parent_proxy); |
553 blink::WebRemoteFrame* parent_web_frame = parent_proxy->web_frame(); | 564 blink::WebRemoteFrame* parent_web_frame = parent_proxy->web_frame(); |
554 | 565 |
555 blink::WebFrame* previous_sibling_web_frame = nullptr; | 566 blink::WebFrame* previous_sibling_web_frame = nullptr; |
556 RenderFrameProxy* previous_sibling_proxy = | 567 RenderFrameProxy* previous_sibling_proxy = |
557 RenderFrameProxy::FromRoutingID(previous_sibling_routing_id); | 568 RenderFrameProxy::FromRoutingID(previous_sibling_routing_id); |
558 if (previous_sibling_proxy) | 569 if (previous_sibling_proxy) |
559 previous_sibling_web_frame = previous_sibling_proxy->web_frame(); | 570 previous_sibling_web_frame = previous_sibling_proxy->web_frame(); |
560 | 571 |
561 // Create the RenderFrame and WebLocalFrame, linking the two. | 572 // Create the RenderFrame and WebLocalFrame, linking the two. |
562 render_frame = | 573 render_frame = |
563 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); | 574 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); |
564 web_frame = parent_web_frame->createLocalChild( | 575 web_frame = parent_web_frame->createLocalChild( |
565 replicated_state.scope, WebString::fromUTF8(replicated_state.name), | 576 replicated_state.scope, WebString::fromUTF8(replicated_state.name), |
566 replicated_state.sandbox_flags, render_frame, | 577 replicated_state.sandbox_flags, render_frame, |
567 previous_sibling_web_frame); | 578 previous_sibling_web_frame); |
568 } else { | 579 } else { |
569 RenderFrameProxy* proxy = | 580 RenderFrameProxy* proxy = |
570 RenderFrameProxy::FromRoutingID(proxy_routing_id); | 581 RenderFrameProxy::FromRoutingID(proxy_routing_id); |
571 CHECK(proxy); | 582 CHECK(proxy); |
| 583 LOG(ERROR) << "RF::CreateFrame:" |
| 584 << " parent_routing_id:" << parent_routing_id |
| 585 << " proxy->web_frame->parent():" << proxy->web_frame()->parent(); |
572 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); | 586 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
573 web_frame = | 587 web_frame = |
574 blink::WebLocalFrame::create(replicated_state.scope, render_frame); | 588 blink::WebLocalFrame::create(replicated_state.scope, render_frame); |
575 render_frame->proxy_routing_id_ = proxy_routing_id; | 589 render_frame->proxy_routing_id_ = proxy_routing_id; |
576 web_frame->initializeToReplaceRemoteFrame( | 590 web_frame->initializeToReplaceRemoteFrame( |
577 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), | 591 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), |
578 replicated_state.sandbox_flags); | 592 replicated_state.sandbox_flags); |
579 } | 593 } |
580 render_frame->SetWebFrame(web_frame); | 594 render_frame->SetWebFrame(web_frame); |
581 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); | 595 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 #endif | 664 #endif |
651 devtools_agent_(nullptr), | 665 devtools_agent_(nullptr), |
652 geolocation_dispatcher_(NULL), | 666 geolocation_dispatcher_(NULL), |
653 push_messaging_dispatcher_(NULL), | 667 push_messaging_dispatcher_(NULL), |
654 presentation_dispatcher_(NULL), | 668 presentation_dispatcher_(NULL), |
655 screen_orientation_dispatcher_(NULL), | 669 screen_orientation_dispatcher_(NULL), |
656 manifest_manager_(NULL), | 670 manifest_manager_(NULL), |
657 accessibility_mode_(AccessibilityModeOff), | 671 accessibility_mode_(AccessibilityModeOff), |
658 renderer_accessibility_(NULL), | 672 renderer_accessibility_(NULL), |
659 weak_factory_(this) { | 673 weak_factory_(this) { |
| 674 LOG(ERROR) << "RF[" << this << "]::RF:" |
| 675 << " routing_id:" << routing_id_; |
| 676 |
660 std::pair<RoutingIDFrameMap::iterator, bool> result = | 677 std::pair<RoutingIDFrameMap::iterator, bool> result = |
661 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this)); | 678 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this)); |
662 CHECK(result.second) << "Inserting a duplicate item."; | 679 CHECK(result.second) << "Inserting a duplicate item."; |
663 | 680 |
664 RenderThread::Get()->AddRoute(routing_id_, this); | 681 RenderThread::Get()->AddRoute(routing_id_, this); |
665 | 682 |
666 render_view_->RegisterRenderFrame(this); | 683 render_view_->RegisterRenderFrame(this); |
667 | 684 |
668 // Everything below subclasses RenderFrameObserver and is automatically | 685 // Everything below subclasses RenderFrameObserver and is automatically |
669 // deleted when the RenderFrame gets deleted. | 686 // deleted when the RenderFrame gets deleted. |
(...skipping 11 matching lines...) Expand all Loading... |
681 RenderFrameImpl::~RenderFrameImpl() { | 698 RenderFrameImpl::~RenderFrameImpl() { |
682 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); | 699 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); |
683 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); | 700 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); |
684 | 701 |
685 #if defined(VIDEO_HOLE) | 702 #if defined(VIDEO_HOLE) |
686 if (contains_media_player_) | 703 if (contains_media_player_) |
687 render_view_->UnregisterVideoHoleFrame(this); | 704 render_view_->UnregisterVideoHoleFrame(this); |
688 #endif | 705 #endif |
689 | 706 |
690 if (!is_subframe_) { | 707 if (!is_subframe_) { |
691 // When not using --site-per-process, RenderFrameProxy is "owned" by | |
692 // RenderFrameImpl in the case it is the main frame. Ensure it is deleted | |
693 // along with this object. | |
694 if (render_frame_proxy_ && | |
695 !base::CommandLine::ForCurrentProcess()->HasSwitch( | |
696 switches::kSitePerProcess)) { | |
697 // The following method calls back into this object and clears | |
698 // |render_frame_proxy_|. | |
699 render_frame_proxy_->frameDetached( | |
700 blink::WebRemoteFrameClient::DetachType::Remove); | |
701 } | |
702 | |
703 // Ensure the RenderView doesn't point to this object, once it is destroyed. | 708 // Ensure the RenderView doesn't point to this object, once it is destroyed. |
704 // TODO(nasko): Add a check that the |main_render_frame_| of |render_view_| | 709 // TODO(nasko): Add a check that the |main_render_frame_| of |render_view_| |
705 // is |this|, once the object is no longer leaked. | 710 // is |this|, once the object is no longer leaked. |
706 // See https://crbug.com/464764. | 711 // See https://crbug.com/464764. |
707 render_view_->main_render_frame_ = nullptr; | 712 render_view_->main_render_frame_ = nullptr; |
708 } | 713 } |
709 | 714 |
710 render_view_->UnregisterRenderFrame(this); | 715 render_view_->UnregisterRenderFrame(this); |
711 g_routing_id_frame_map.Get().erase(routing_id_); | 716 g_routing_id_frame_map.Get().erase(routing_id_); |
712 RenderThread::Get()->RemoveRoute(routing_id_); | 717 RenderThread::Get()->RemoveRoute(routing_id_); |
| 718 LOG(ERROR) << "RF[" << this << "]::~RF"; |
713 } | 719 } |
714 | 720 |
715 void RenderFrameImpl::SetWebFrame(blink::WebLocalFrame* web_frame) { | 721 void RenderFrameImpl::SetWebFrame(blink::WebLocalFrame* web_frame) { |
716 DCHECK(!frame_); | 722 DCHECK(!frame_); |
717 | 723 |
718 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert( | 724 std::pair<FrameMap::iterator, bool> result = g_frame_map.Get().insert( |
719 std::make_pair(web_frame, this)); | 725 std::make_pair(web_frame, this)); |
720 CHECK(result.second) << "Inserting a duplicate item."; | 726 CHECK(result.second) << "Inserting a duplicate item."; |
721 | 727 |
722 frame_ = web_frame; | 728 frame_ = web_frame; |
723 } | 729 } |
724 | 730 |
725 void RenderFrameImpl::Initialize() { | 731 void RenderFrameImpl::Initialize() { |
726 is_subframe_ = !!frame_->parent(); | 732 is_subframe_ = !!frame_->parent(); |
727 is_local_root_ = !frame_->parent() || frame_->parent()->isWebRemoteFrame(); | 733 is_local_root_ = !frame_->parent() || frame_->parent()->isWebRemoteFrame(); |
| 734 LOG(ERROR) << "RF[" << this << "]::Init:" |
| 735 << " is_subframe_:" << is_subframe_ |
| 736 << " is_local_root_:" << is_local_root_ |
| 737 << " rv:" << render_view_.get(); |
728 | 738 |
729 #if defined(ENABLE_PLUGINS) | 739 #if defined(ENABLE_PLUGINS) |
730 new PepperBrowserConnection(this); | 740 new PepperBrowserConnection(this); |
731 #endif | 741 #endif |
732 new SharedWorkerRepository(this); | 742 new SharedWorkerRepository(this); |
733 | 743 |
734 if (!frame_->parent()) | 744 if (!frame_->parent()) |
735 new ImageLoadingHelper(this); | 745 new ImageLoadingHelper(this); |
736 | 746 |
737 if (is_local_root_ && !render_frame_proxy_) { | 747 if (is_local_root_ && !render_frame_proxy_) { |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 base::TimeTicks before_unload_end_time = base::TimeTicks::Now(); | 1112 base::TimeTicks before_unload_end_time = base::TimeTicks::Now(); |
1103 Send(new FrameHostMsg_BeforeUnload_ACK(routing_id_, proceed, | 1113 Send(new FrameHostMsg_BeforeUnload_ACK(routing_id_, proceed, |
1104 before_unload_start_time, | 1114 before_unload_start_time, |
1105 before_unload_end_time)); | 1115 before_unload_end_time)); |
1106 } | 1116 } |
1107 | 1117 |
1108 void RenderFrameImpl::OnSwapOut( | 1118 void RenderFrameImpl::OnSwapOut( |
1109 int proxy_routing_id, | 1119 int proxy_routing_id, |
1110 bool is_loading, | 1120 bool is_loading, |
1111 const FrameReplicationState& replicated_frame_state) { | 1121 const FrameReplicationState& replicated_frame_state) { |
| 1122 LOG(ERROR) << "RF[" << this << "]::OnSwapOut:" |
| 1123 << " proxy:" << proxy_routing_id |
| 1124 << " is loading:" << is_loading; |
| 1125 |
1112 TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_); | 1126 TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_); |
1113 RenderFrameProxy* proxy = NULL; | 1127 RenderFrameProxy* proxy = NULL; |
1114 bool is_site_per_process = base::CommandLine::ForCurrentProcess()->HasSwitch( | 1128 bool is_site_per_process = base::CommandLine::ForCurrentProcess()->HasSwitch( |
1115 switches::kSitePerProcess); | 1129 switches::kSitePerProcess); |
1116 bool is_main_frame = !frame_->parent(); | 1130 bool is_main_frame = !frame_->parent(); |
| 1131 bool swapped_out_forbidden = true; |
| 1132 |
| 1133 // Chrome no longer supports swapped out RenderFrameImpl. |
| 1134 // TODO(nasko): Remove this check and the associated boolean variable once |
| 1135 // the removal work has had enough time to verify it works. |
| 1136 CHECK(!is_swapped_out_); |
| 1137 |
| 1138 // This codepath should only be hit for subframes when in --site-per-process. |
| 1139 CHECK_IMPLIES(!is_main_frame, is_site_per_process); |
1117 | 1140 |
1118 // Only run unload if we're not swapped out yet, but send the ack either way. | 1141 // Only run unload if we're not swapped out yet, but send the ack either way. |
1119 if (!is_swapped_out_) { | 1142 if (!is_swapped_out_) { |
1120 // Swap this RenderFrame out so the frame can navigate to a page rendered by | 1143 // Swap this RenderFrame out so the frame can navigate to a page rendered by |
1121 // a different process. This involves running the unload handler and | 1144 // a different process. This involves running the unload handler and |
1122 // clearing the page. We also allow this process to exit if there are no | 1145 // clearing the page. We also allow this process to exit if there are no |
1123 // other active RenderFrames in it. | 1146 // other active RenderFrames in it. |
1124 | 1147 |
1125 // Send an UpdateState message before we get swapped out. | 1148 // Send an UpdateState message before we get swapped out. |
1126 render_view_->SyncNavigationState(); | 1149 render_view_->SyncNavigationState(); |
(...skipping 21 matching lines...) Expand all Loading... |
1148 // willCheckAndDispatchMessageEvent() that needs the proxy. | 1171 // willCheckAndDispatchMessageEvent() that needs the proxy. |
1149 if (proxy) | 1172 if (proxy) |
1150 set_render_frame_proxy(proxy); | 1173 set_render_frame_proxy(proxy); |
1151 | 1174 |
1152 // Now that we're swapped out and filtering IPC messages, stop loading to | 1175 // Now that we're swapped out and filtering IPC messages, stop loading to |
1153 // ensure that no other in-progress navigation continues. We do this here | 1176 // ensure that no other in-progress navigation continues. We do this here |
1154 // to avoid sending a DidStopLoading message to the browser process. | 1177 // to avoid sending a DidStopLoading message to the browser process. |
1155 // TODO(creis): Should we be stopping all frames here and using | 1178 // TODO(creis): Should we be stopping all frames here and using |
1156 // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this | 1179 // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this |
1157 // frame? | 1180 // frame? |
1158 if (!is_site_per_process) | 1181 if (!swapped_out_forbidden) |
1159 OnStop(); | 1182 OnStop(); |
1160 | 1183 |
1161 // Transfer settings such as initial drawing parameters to the remote frame, | 1184 // Transfer settings such as initial drawing parameters to the remote frame, |
1162 // if one is created, that will replace this frame. | 1185 // if one is created, that will replace this frame. |
1163 if (!is_main_frame && proxy) | 1186 if (!is_main_frame && proxy) |
1164 proxy->web_frame()->initializeFromFrame(frame_); | 1187 proxy->web_frame()->initializeFromFrame(frame_); |
1165 | 1188 |
1166 // Replace the page with a blank dummy URL. The unload handler will not be | 1189 // Replace the page with a blank dummy URL. The unload handler will not be |
1167 // run a second time, thanks to a check in FrameLoader::stopLoading. | 1190 // run a second time, thanks to a check in FrameLoader::stopLoading. |
1168 // TODO(creis): Need to add a better way to do this that avoids running the | 1191 // TODO(creis): Need to add a better way to do this that avoids running the |
1169 // beforeunload handler. For now, we just run it a second time silently. | 1192 // beforeunload handler. For now, we just run it a second time silently. |
1170 if (!is_site_per_process) | 1193 if (!swapped_out_forbidden) |
1171 NavigateToSwappedOutURL(); | 1194 NavigateToSwappedOutURL(); |
1172 | 1195 |
1173 // Let WebKit know that this view is hidden so it can drop resources and | 1196 // Let WebKit know that this view is hidden so it can drop resources and |
1174 // stop compositing. | 1197 // stop compositing. |
1175 // TODO(creis): Support this for subframes as well. | 1198 // TODO(creis): Support this for subframes as well. |
1176 if (is_main_frame) { | 1199 if (is_main_frame) { |
1177 render_view_->webview()->setVisibilityState( | 1200 render_view_->webview()->setVisibilityState( |
1178 blink::WebPageVisibilityStateHidden, false); | 1201 blink::WebPageVisibilityStateHidden, false); |
1179 } | 1202 } |
1180 } | 1203 } |
1181 | 1204 |
1182 // It is now safe to show modal dialogs again. | 1205 // It is now safe to show modal dialogs again. |
1183 // TODO(creis): Deal with modal dialogs from subframes. | 1206 // TODO(creis): Deal with modal dialogs from subframes. |
1184 if (is_main_frame) | 1207 if (is_main_frame) |
1185 render_view_->suppress_dialogs_until_swap_out_ = false; | 1208 render_view_->suppress_dialogs_until_swap_out_ = false; |
1186 | 1209 |
1187 Send(new FrameHostMsg_SwapOut_ACK(routing_id_)); | 1210 Send(new FrameHostMsg_SwapOut_ACK(routing_id_)); |
1188 | 1211 |
1189 RenderViewImpl* render_view = render_view_.get(); | 1212 RenderViewImpl* render_view = render_view_.get(); |
1190 | 1213 |
1191 // Now that all of the cleanup is complete and the browser side is notified, | 1214 // Now that all of the cleanup is complete and the browser side is notified, |
1192 // start using the RenderFrameProxy, if one is created. | 1215 // start using the RenderFrameProxy, if one is created. |
1193 if (proxy) { | 1216 if (proxy) { |
1194 if (is_site_per_process || !is_main_frame) { | 1217 if (swapped_out_forbidden) { |
1195 frame_->swap(proxy->web_frame()); | 1218 frame_->swap(proxy->web_frame()); |
1196 | 1219 |
1197 if (is_loading) | 1220 if (is_loading) |
1198 proxy->OnDidStartLoading(); | 1221 proxy->OnDidStartLoading(); |
1199 } | 1222 } |
1200 } | 1223 } |
1201 | 1224 |
1202 // In --site-per-process, initialize the WebRemoteFrame with the replication | 1225 // In --site-per-process, initialize the WebRemoteFrame with the replication |
1203 // state passed by the process that is now rendering the frame. | 1226 // state passed by the process that is now rendering the frame. |
1204 // TODO(alexmos): We cannot yet do this for swapped-out main frames, because | 1227 // TODO(alexmos): We cannot yet do this for swapped-out main frames, because |
1205 // in that case we leave the LocalFrame as the main frame visible to Blink | 1228 // in that case we leave the LocalFrame as the main frame visible to Blink |
1206 // and don't call swap() above. Because swap() is what creates a RemoteFrame | 1229 // and don't call swap() above. Because swap() is what creates a RemoteFrame |
1207 // in proxy->web_frame(), the RemoteFrame will not exist for main frames. | 1230 // in proxy->web_frame(), the RemoteFrame will not exist for main frames. |
1208 // When we do an unconditional swap for all frames, we can remove | 1231 // When we do an unconditional swap for all frames, we can remove |
1209 // !is_main_frame below. | 1232 // !is_main_frame below. |
1210 if (is_site_per_process && proxy) | 1233 if (swapped_out_forbidden && proxy) |
1211 proxy->SetReplicatedState(replicated_frame_state); | 1234 proxy->SetReplicatedState(replicated_frame_state); |
1212 | 1235 |
1213 // Safe to exit if no one else is using the process. | 1236 // Safe to exit if no one else is using the process. |
1214 // TODO(nasko): Remove the dependency on RenderViewImpl here and ref count | 1237 // TODO(nasko): Remove the dependency on RenderViewImpl here and ref count |
1215 // the process based on the lifetime of this RenderFrameImpl object. | 1238 // the process based on the lifetime of this RenderFrameImpl object. |
1216 if (is_main_frame) { | 1239 if (is_main_frame) { |
1217 render_view->WasSwappedOut(); | 1240 render_view->WasSwappedOut(); |
1218 } | 1241 } |
1219 } | 1242 } |
1220 | 1243 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1368 } | 1391 } |
1369 | 1392 |
1370 void RenderFrameImpl::OnJavaScriptExecuteRequestForTests( | 1393 void RenderFrameImpl::OnJavaScriptExecuteRequestForTests( |
1371 const base::string16& jscript, | 1394 const base::string16& jscript, |
1372 int id, | 1395 int id, |
1373 bool notify_result, | 1396 bool notify_result, |
1374 bool has_user_gesture) { | 1397 bool has_user_gesture) { |
1375 TRACE_EVENT_INSTANT0("test_tracing", "OnJavaScriptExecuteRequestForTests", | 1398 TRACE_EVENT_INSTANT0("test_tracing", "OnJavaScriptExecuteRequestForTests", |
1376 TRACE_EVENT_SCOPE_THREAD); | 1399 TRACE_EVENT_SCOPE_THREAD); |
1377 | 1400 |
| 1401 LOG(ERROR) << "RF[" << this << "]::OnJSExecForTests: " |
| 1402 << " id:" << id |
| 1403 << " script:|" << jscript << "|"; |
| 1404 |
1378 // A bunch of tests expect to run code in the context of a user gesture, which | 1405 // A bunch of tests expect to run code in the context of a user gesture, which |
1379 // can grant additional privileges (e.g. the ability to create popups). | 1406 // can grant additional privileges (e.g. the ability to create popups). |
1380 scoped_ptr<blink::WebScopedUserGesture> gesture( | 1407 scoped_ptr<blink::WebScopedUserGesture> gesture( |
1381 has_user_gesture ? new blink::WebScopedUserGesture : nullptr); | 1408 has_user_gesture ? new blink::WebScopedUserGesture : nullptr); |
1382 v8::HandleScope handle_scope(blink::mainThreadIsolate()); | 1409 v8::HandleScope handle_scope(blink::mainThreadIsolate()); |
1383 v8::Local<v8::Value> result = | 1410 v8::Local<v8::Value> result = |
1384 frame_->executeScriptAndReturnValue(WebScriptSource(jscript)); | 1411 frame_->executeScriptAndReturnValue(WebScriptSource(jscript)); |
1385 | 1412 |
1386 HandleJavascriptExecutionResult(jscript, id, notify_result, result); | 1413 HandleJavascriptExecutionResult(jscript, id, notify_result, result); |
1387 } | 1414 } |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 } | 1567 } |
1541 | 1568 |
1542 void RenderFrameImpl::OnSnapshotAccessibilityTree(int callback_id) { | 1569 void RenderFrameImpl::OnSnapshotAccessibilityTree(int callback_id) { |
1543 ui::AXTreeUpdate response; | 1570 ui::AXTreeUpdate response; |
1544 RendererAccessibility::SnapshotAccessibilityTree(this, &response); | 1571 RendererAccessibility::SnapshotAccessibilityTree(this, &response); |
1545 Send(new AccessibilityHostMsg_SnapshotResponse( | 1572 Send(new AccessibilityHostMsg_SnapshotResponse( |
1546 routing_id_, callback_id, response)); | 1573 routing_id_, callback_id, response)); |
1547 } | 1574 } |
1548 | 1575 |
1549 void RenderFrameImpl::OnDisownOpener() { | 1576 void RenderFrameImpl::OnDisownOpener() { |
| 1577 LOG(ERROR) << "RF[" << this << "]::OnDisownOpener"; |
1550 // TODO(creis): We should only see this for main frames for now. To support | 1578 // TODO(creis): We should only see this for main frames for now. To support |
1551 // disowning the opener on subframes, we will need to move WebContentsImpl's | 1579 // disowning the opener on subframes, we will need to move WebContentsImpl's |
1552 // opener_ to FrameTreeNode. | 1580 // opener_ to FrameTreeNode. |
1553 CHECK(!frame_->parent()); | 1581 CHECK(!frame_->parent()); |
1554 | 1582 |
1555 if (frame_->opener()) | 1583 if (frame_->opener()) |
1556 frame_->setOpener(NULL); | 1584 frame_->setOpener(NULL); |
1557 } | 1585 } |
1558 | 1586 |
1559 void RenderFrameImpl::OnDidUpdateSandboxFlags(blink::WebSandboxFlags flags) { | 1587 void RenderFrameImpl::OnDidUpdateSandboxFlags(blink::WebSandboxFlags flags) { |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2115 | 2143 |
2116 blink::WebFrame* RenderFrameImpl::createChildFrame( | 2144 blink::WebFrame* RenderFrameImpl::createChildFrame( |
2117 blink::WebLocalFrame* parent, | 2145 blink::WebLocalFrame* parent, |
2118 const blink::WebString& name, | 2146 const blink::WebString& name, |
2119 blink::WebSandboxFlags sandbox_flags) { | 2147 blink::WebSandboxFlags sandbox_flags) { |
2120 return createChildFrame(parent, blink::WebTreeScopeType::Document, name, | 2148 return createChildFrame(parent, blink::WebTreeScopeType::Document, name, |
2121 sandbox_flags); | 2149 sandbox_flags); |
2122 } | 2150 } |
2123 | 2151 |
2124 void RenderFrameImpl::didDisownOpener(blink::WebLocalFrame* frame) { | 2152 void RenderFrameImpl::didDisownOpener(blink::WebLocalFrame* frame) { |
| 2153 LOG(ERROR) << "RF[" << this << "]::didDisownOpener"; |
| 2154 |
2125 DCHECK(!frame_ || frame_ == frame); | 2155 DCHECK(!frame_ || frame_ == frame); |
2126 // We only need to notify the browser if the active, top-level frame clears | 2156 // We only need to notify the browser if the active, top-level frame clears |
2127 // its opener. We can ignore cases where a swapped out frame clears its | 2157 // its opener. We can ignore cases where a swapped out frame clears its |
2128 // opener after hearing about it from the browser, and the browser does not | 2158 // opener after hearing about it from the browser, and the browser does not |
2129 // (yet) care about subframe openers. | 2159 // (yet) care about subframe openers. |
2130 if (is_swapped_out_ || frame->parent()) | 2160 if (is_swapped_out_ || frame->parent()) { |
| 2161 LOG(ERROR) << "RF[" << this << "]::didDisownOpener:" |
| 2162 << " swapped_out:" << is_swapped_out_ |
| 2163 << " parent:" << frame->parent(); |
2131 return; | 2164 return; |
| 2165 } |
2132 | 2166 |
2133 // Notify WebContents and all its swapped out RenderViews. | 2167 // Notify WebContents and all its swapped out RenderViews. |
2134 Send(new FrameHostMsg_DidDisownOpener(routing_id_)); | 2168 Send(new FrameHostMsg_DidDisownOpener(routing_id_)); |
2135 } | 2169 } |
2136 | 2170 |
2137 void RenderFrameImpl::frameDetached(blink::WebFrame* frame) { | 2171 void RenderFrameImpl::frameDetached(blink::WebFrame* frame) { |
2138 frameDetached(frame, DetachType::Remove); | 2172 frameDetached(frame, DetachType::Remove); |
2139 } | 2173 } |
2140 | 2174 |
2141 void RenderFrameImpl::frameDetached(blink::WebFrame* frame, DetachType type) { | 2175 void RenderFrameImpl::frameDetached(blink::WebFrame* frame, DetachType type) { |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2479 | 2513 |
2480 TRACE_EVENT2("navigation", "RenderFrameImpl::didStartProvisionalLoad", | 2514 TRACE_EVENT2("navigation", "RenderFrameImpl::didStartProvisionalLoad", |
2481 "id", routing_id_, "url", ds->request().url().string().utf8()); | 2515 "id", routing_id_, "url", ds->request().url().string().utf8()); |
2482 DocumentState* document_state = DocumentState::FromDataSource(ds); | 2516 DocumentState* document_state = DocumentState::FromDataSource(ds); |
2483 | 2517 |
2484 // We should only navigate to swappedout:// when is_swapped_out_ is true. | 2518 // We should only navigate to swappedout:// when is_swapped_out_ is true. |
2485 CHECK((ds->request().url() != GURL(kSwappedOutURL)) || | 2519 CHECK((ds->request().url() != GURL(kSwappedOutURL)) || |
2486 is_swapped_out_) << | 2520 is_swapped_out_) << |
2487 "Heard swappedout:// when not swapped out."; | 2521 "Heard swappedout:// when not swapped out."; |
2488 | 2522 |
| 2523 LOG(ERROR) << "RF[" << this << "]::didStartProvLoad:" |
| 2524 << " url:" << ds->request().url(); |
| 2525 |
2489 // Update the request time if WebKit has better knowledge of it. | 2526 // Update the request time if WebKit has better knowledge of it. |
2490 if (document_state->request_time().is_null() && | 2527 if (document_state->request_time().is_null() && |
2491 triggering_event_time != 0.0) { | 2528 triggering_event_time != 0.0) { |
2492 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); | 2529 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); |
2493 } | 2530 } |
2494 | 2531 |
2495 // Start time is only set after request time. | 2532 // Start time is only set after request time. |
2496 document_state->set_start_load_time(Time::Now()); | 2533 document_state->set_start_load_time(Time::Now()); |
2497 | 2534 |
2498 bool is_top_most = !frame->parent(); | 2535 bool is_top_most = !frame->parent(); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2583 blink::WebHistoryCommitType commit_type) { | 2620 blink::WebHistoryCommitType commit_type) { |
2584 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", | 2621 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", |
2585 "id", routing_id_, | 2622 "id", routing_id_, |
2586 "url", GetLoadingUrl().possibly_invalid_spec()); | 2623 "url", GetLoadingUrl().possibly_invalid_spec()); |
2587 DCHECK(!frame_ || frame_ == frame); | 2624 DCHECK(!frame_ || frame_ == frame); |
2588 DocumentState* document_state = | 2625 DocumentState* document_state = |
2589 DocumentState::FromDataSource(frame->dataSource()); | 2626 DocumentState::FromDataSource(frame->dataSource()); |
2590 NavigationStateImpl* navigation_state = | 2627 NavigationStateImpl* navigation_state = |
2591 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | 2628 static_cast<NavigationStateImpl*>(document_state->navigation_state()); |
2592 | 2629 |
| 2630 LOG(ERROR) << "RF[" << this << "]::didCommitProvLoad:" |
| 2631 << " url:" << GetLoadingUrl() |
| 2632 << " proxy_routing_id_:" << proxy_routing_id_; |
| 2633 |
2593 if (proxy_routing_id_ != MSG_ROUTING_NONE) { | 2634 if (proxy_routing_id_ != MSG_ROUTING_NONE) { |
2594 RenderFrameProxy* proxy = | 2635 RenderFrameProxy* proxy = |
2595 RenderFrameProxy::FromRoutingID(proxy_routing_id_); | 2636 RenderFrameProxy::FromRoutingID(proxy_routing_id_); |
2596 CHECK(proxy); | 2637 CHECK(proxy); |
2597 proxy->web_frame()->swap(frame_); | 2638 proxy->web_frame()->swap(frame_); |
2598 proxy_routing_id_ = MSG_ROUTING_NONE; | 2639 proxy_routing_id_ = MSG_ROUTING_NONE; |
2599 | 2640 |
2600 // If this is the main frame going from a remote frame to a local frame, | 2641 // If this is the main frame going from a remote frame to a local frame, |
2601 // it needs to set RenderViewImpl's pointer for the main frame to itself | 2642 // it needs to set RenderViewImpl's pointer for the main frame to itself |
2602 // and ensure RenderWidget is no longer in swapped out mode. | 2643 // and ensure RenderWidget is no longer in swapped out mode. |
2603 if (!is_subframe_) { | 2644 if (!is_subframe_) { |
2604 CHECK(!render_view_->main_render_frame_); | 2645 CHECK(!render_view_->main_render_frame_); |
2605 render_view_->main_render_frame_ = this; | 2646 render_view_->main_render_frame_ = this; |
2606 if (render_view_->is_swapped_out()) | 2647 LOG(ERROR) << "RF[" << this << "]::didCommitProvLoad:" |
| 2648 << " main frame, rv swapped_out:" << render_view_->is_swapped_out(); |
| 2649 if (render_view_->is_swapped_out()) { |
2607 render_view_->SetSwappedOut(false); | 2650 render_view_->SetSwappedOut(false); |
| 2651 } |
2608 } | 2652 } |
2609 } | 2653 } |
2610 | 2654 |
2611 // When we perform a new navigation, we need to update the last committed | 2655 // When we perform a new navigation, we need to update the last committed |
2612 // session history entry with state for the page we are leaving. Do this | 2656 // session history entry with state for the page we are leaving. Do this |
2613 // before updating the HistoryController state. | 2657 // before updating the HistoryController state. |
2614 render_view_->UpdateSessionHistory(frame); | 2658 render_view_->UpdateSessionHistory(frame); |
2615 | 2659 |
2616 render_view_->history_controller()->UpdateForCommit( | 2660 render_view_->history_controller()->UpdateForCommit( |
2617 this, item, commit_type, navigation_state->WasWithinSamePage()); | 2661 this, item, commit_type, navigation_state->WasWithinSamePage()); |
(...skipping 1825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4443 if (!browser_side_navigation) { | 4487 if (!browser_side_navigation) { |
4444 scoped_ptr<NavigationParams> navigation_params( | 4488 scoped_ptr<NavigationParams> navigation_params( |
4445 new NavigationParams(*pending_navigation_params_.get())); | 4489 new NavigationParams(*pending_navigation_params_.get())); |
4446 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 4490 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
4447 switches::kSitePerProcess)) { | 4491 switches::kSitePerProcess)) { |
4448 // By default, tell the HistoryController to go the deserialized | 4492 // By default, tell the HistoryController to go the deserialized |
4449 // HistoryEntry. This only works if all frames are in the same | 4493 // HistoryEntry. This only works if all frames are in the same |
4450 // process. | 4494 // process. |
4451 DCHECK(!frame_->parent()); | 4495 DCHECK(!frame_->parent()); |
4452 render_view_->history_controller()->GoToEntry( | 4496 render_view_->history_controller()->GoToEntry( |
4453 entry.Pass(), navigation_params.Pass(), cache_policy); | 4497 frame_, entry.Pass(), navigation_params.Pass(), cache_policy); |
4454 } else { | 4498 } else { |
4455 // In --site-per-process, the browser process sends a single | 4499 // In --site-per-process, the browser process sends a single |
4456 // WebHistoryItem destined for this frame. | 4500 // WebHistoryItem destined for this frame. |
4457 // TODO(creis): Change PageState to FrameState. In the meantime, we | 4501 // TODO(creis): Change PageState to FrameState. In the meantime, we |
4458 // store the relevant frame's WebHistoryItem in the root of the | 4502 // store the relevant frame's WebHistoryItem in the root of the |
4459 // PageState. | 4503 // PageState. |
4460 SetPendingNavigationParams(navigation_params.Pass()); | 4504 SetPendingNavigationParams(navigation_params.Pass()); |
4461 blink::WebHistoryItem history_item = entry->root(); | 4505 blink::WebHistoryItem history_item = entry->root(); |
4462 blink::WebHistoryLoadType load_type = | 4506 blink::WebHistoryLoadType load_type = |
4463 request_params.is_same_document_history_load | 4507 request_params.is_same_document_history_load |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4970 #elif defined(ENABLE_BROWSER_CDMS) | 5014 #elif defined(ENABLE_BROWSER_CDMS) |
4971 cdm_manager_, | 5015 cdm_manager_, |
4972 #endif | 5016 #endif |
4973 this); | 5017 this); |
4974 } | 5018 } |
4975 | 5019 |
4976 return cdm_factory_; | 5020 return cdm_factory_; |
4977 } | 5021 } |
4978 | 5022 |
4979 } // namespace content | 5023 } // namespace content |
OLD | NEW |