Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 438393004: Revert of Start using RenderFrameProxyHost objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_frame_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 #include "content/renderer/media/midi_dispatcher.h" 71 #include "content/renderer/media/midi_dispatcher.h"
72 #include "content/renderer/media/render_media_log.h" 72 #include "content/renderer/media/render_media_log.h"
73 #include "content/renderer/media/webcontentdecryptionmodule_impl.h" 73 #include "content/renderer/media/webcontentdecryptionmodule_impl.h"
74 #include "content/renderer/media/webmediaplayer_impl.h" 74 #include "content/renderer/media/webmediaplayer_impl.h"
75 #include "content/renderer/media/webmediaplayer_ms.h" 75 #include "content/renderer/media/webmediaplayer_ms.h"
76 #include "content/renderer/media/webmediaplayer_params.h" 76 #include "content/renderer/media/webmediaplayer_params.h"
77 #include "content/renderer/notification_permission_dispatcher.h" 77 #include "content/renderer/notification_permission_dispatcher.h"
78 #include "content/renderer/notification_provider.h" 78 #include "content/renderer/notification_provider.h"
79 #include "content/renderer/npapi/plugin_channel_host.h" 79 #include "content/renderer/npapi/plugin_channel_host.h"
80 #include "content/renderer/push_messaging_dispatcher.h" 80 #include "content/renderer/push_messaging_dispatcher.h"
81 #include "content/renderer/render_frame_proxy.h"
82 #include "content/renderer/render_process.h" 81 #include "content/renderer/render_process.h"
83 #include "content/renderer/render_thread_impl.h" 82 #include "content/renderer/render_thread_impl.h"
84 #include "content/renderer/render_view_impl.h" 83 #include "content/renderer/render_view_impl.h"
85 #include "content/renderer/render_widget_fullscreen_pepper.h" 84 #include "content/renderer/render_widget_fullscreen_pepper.h"
86 #include "content/renderer/renderer_webapplicationcachehost_impl.h" 85 #include "content/renderer/renderer_webapplicationcachehost_impl.h"
87 #include "content/renderer/renderer_webcolorchooser_impl.h" 86 #include "content/renderer/renderer_webcolorchooser_impl.h"
88 #include "content/renderer/screen_orientation/screen_orientation_dispatcher.h" 87 #include "content/renderer/screen_orientation/screen_orientation_dispatcher.h"
89 #include "content/renderer/shared_worker_repository.h" 88 #include "content/renderer/shared_worker_repository.h"
90 #include "content/renderer/v8_value_converter_impl.h" 89 #include "content/renderer/v8_value_converter_impl.h"
91 #include "content/renderer/websharedworker_proxy.h" 90 #include "content/renderer/websharedworker_proxy.h"
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 // static 369 // static
371 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) { 370 RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) {
372 RoutingIDFrameMap::iterator iter = 371 RoutingIDFrameMap::iterator iter =
373 g_routing_id_frame_map.Get().find(routing_id); 372 g_routing_id_frame_map.Get().find(routing_id);
374 if (iter != g_routing_id_frame_map.Get().end()) 373 if (iter != g_routing_id_frame_map.Get().end())
375 return iter->second; 374 return iter->second;
376 return NULL; 375 return NULL;
377 } 376 }
378 377
379 // static 378 // static
380 void RenderFrameImpl::CreateFrame(int routing_id, int parent_routing_id) {
381 // TODO(nasko): For now, this message is only sent for subframes, as the
382 // top level frame is created when the RenderView is created through the
383 // ViewMsg_New IPC.
384 CHECK_NE(MSG_ROUTING_NONE, parent_routing_id);
385
386 RenderFrameProxy* proxy = RenderFrameProxy::FromRoutingID(parent_routing_id);
387
388 // If the browser is sending a valid parent routing id, it should already be
389 // created and registered.
390 CHECK(proxy);
391 blink::WebRemoteFrame* parent_web_frame = proxy->web_frame();
392
393 // Create the RenderFrame and WebLocalFrame, linking the two.
394 RenderFrameImpl* render_frame =
395 RenderFrameImpl::Create(proxy->render_view(), routing_id);
396 blink::WebLocalFrame* web_frame =
397 parent_web_frame->createLocalChild("", render_frame);
398 render_frame->SetWebFrame(web_frame);
399 render_frame->Initialize();
400 }
401
402 // static
403 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) { 379 RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) {
404 return RenderFrameImpl::FromWebFrame(web_frame); 380 return RenderFrameImpl::FromWebFrame(web_frame);
405 } 381 }
406 382
407 // static
408 RenderFrameImpl* RenderFrameImpl::FromWebFrame(blink::WebFrame* web_frame) { 383 RenderFrameImpl* RenderFrameImpl::FromWebFrame(blink::WebFrame* web_frame) {
409 FrameMap::iterator iter = g_frame_map.Get().find(web_frame); 384 FrameMap::iterator iter = g_frame_map.Get().find(web_frame);
410 if (iter != g_frame_map.Get().end()) 385 if (iter != g_frame_map.Get().end())
411 return iter->second; 386 return iter->second;
412 return NULL; 387 return NULL;
413 } 388 }
414 389
415 // static 390 // static
416 void RenderFrameImpl::InstallCreateHook( 391 void RenderFrameImpl::InstallCreateHook(
417 RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32)) { 392 RenderFrameImpl* (*create_render_frame_impl)(RenderViewImpl*, int32)) {
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 InitializeUserMediaClient(); 670 InitializeUserMediaClient();
696 return web_user_media_client_ ? 671 return web_user_media_client_ ?
697 web_user_media_client_->media_stream_dispatcher() : NULL; 672 web_user_media_client_->media_stream_dispatcher() : NULL;
698 } 673 }
699 674
700 bool RenderFrameImpl::Send(IPC::Message* message) { 675 bool RenderFrameImpl::Send(IPC::Message* message) {
701 if (is_detaching_) { 676 if (is_detaching_) {
702 delete message; 677 delete message;
703 return false; 678 return false;
704 } 679 }
705 if (frame_->parent() == NULL && 680 if (is_swapped_out_ || render_view_->is_swapped_out()) {
706 (is_swapped_out_ || render_view_->is_swapped_out())) {
707 if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) { 681 if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) {
708 delete message; 682 delete message;
709 return false; 683 return false;
710 } 684 }
711
712 // In most cases, send IPCs through the proxy when swapped out. In some 685 // In most cases, send IPCs through the proxy when swapped out. In some
713 // calls the associated RenderViewImpl routing id is used to send 686 // calls the associated RenderViewImpl routing id is used to send
714 // messages, so don't use the proxy. 687 // messages, so don't use the proxy.
715 if (render_frame_proxy_ && message->routing_id() == routing_id_) 688 if (render_frame_proxy_ && message->routing_id() == routing_id_)
716 return render_frame_proxy_->Send(message); 689 return render_frame_proxy_->Send(message);
717 } 690 }
718 691
719 return RenderThread::Get()->Send(message); 692 return RenderThread::Get()->Send(message);
720 } 693 }
721 694
722 bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { 695 bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
723 // TODO(kenrb): document() should not be null, but as a transitional step 696 GetContentClient()->SetActiveURL(frame_->document().url());
724 // we have RenderFrameProxy 'wrapping' a RenderFrameImpl, passing messages
725 // to this method. This happens for a top-level remote frame, where a
726 // document-less RenderFrame is replaced by a RenderFrameProxy but kept
727 // around and is still able to receive messages.
728 if (!frame_->document().isNull())
729 GetContentClient()->SetActiveURL(frame_->document().url());
730 697
731 ObserverListBase<RenderFrameObserver>::Iterator it(observers_); 698 ObserverListBase<RenderFrameObserver>::Iterator it(observers_);
732 RenderFrameObserver* observer; 699 RenderFrameObserver* observer;
733 while ((observer = it.GetNext()) != NULL) { 700 while ((observer = it.GetNext()) != NULL) {
734 if (observer->OnMessageReceived(msg)) 701 if (observer->OnMessageReceived(msg))
735 return true; 702 return true;
736 } 703 }
737 704
738 bool handled = true; 705 bool handled = true;
739 IPC_BEGIN_MESSAGE_MAP(RenderFrameImpl, msg) 706 IPC_BEGIN_MESSAGE_MAP(RenderFrameImpl, msg)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 bool is_reload = RenderViewImpl::IsReload(params); 757 bool is_reload = RenderViewImpl::IsReload(params);
791 WebURLRequest::CachePolicy cache_policy = 758 WebURLRequest::CachePolicy cache_policy =
792 WebURLRequest::UseProtocolCachePolicy; 759 WebURLRequest::UseProtocolCachePolicy;
793 760
794 // If this is a stale back/forward (due to a recent navigation the browser 761 // If this is a stale back/forward (due to a recent navigation the browser
795 // didn't know about), ignore it. 762 // didn't know about), ignore it.
796 if (render_view_->IsBackForwardToStaleEntry(params, is_reload)) 763 if (render_view_->IsBackForwardToStaleEntry(params, is_reload))
797 return; 764 return;
798 765
799 // Swap this renderer back in if necessary. 766 // Swap this renderer back in if necessary.
800 if (render_view_->is_swapped_out_ && 767 if (render_view_->is_swapped_out_) {
801 GetWebFrame() == render_view_->webview()->mainFrame()) {
802 // We marked the view as hidden when swapping the view out, so be sure to 768 // We marked the view as hidden when swapping the view out, so be sure to
803 // reset the visibility state before navigating to the new URL. 769 // reset the visibility state before navigating to the new URL.
804 render_view_->webview()->setVisibilityState( 770 render_view_->webview()->setVisibilityState(
805 render_view_->visibilityState(), false); 771 render_view_->visibilityState(), false);
806 772
807 // If this is an attempt to reload while we are swapped out, we should not 773 // If this is an attempt to reload while we are swapped out, we should not
808 // reload swappedout://, but the previous page, which is stored in 774 // reload swappedout://, but the previous page, which is stored in
809 // params.state. Setting is_reload to false will treat this like a back 775 // params.state. Setting is_reload to false will treat this like a back
810 // navigation to accomplish that. 776 // navigation to accomplish that.
811 is_reload = false; 777 is_reload = false;
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 base::TimeTicks before_unload_start_time = base::TimeTicks::Now(); 950 base::TimeTicks before_unload_start_time = base::TimeTicks::Now();
985 bool proceed = frame_->dispatchBeforeUnloadEvent(); 951 bool proceed = frame_->dispatchBeforeUnloadEvent();
986 base::TimeTicks before_unload_end_time = base::TimeTicks::Now(); 952 base::TimeTicks before_unload_end_time = base::TimeTicks::Now();
987 Send(new FrameHostMsg_BeforeUnload_ACK(routing_id_, proceed, 953 Send(new FrameHostMsg_BeforeUnload_ACK(routing_id_, proceed,
988 before_unload_start_time, 954 before_unload_start_time,
989 before_unload_end_time)); 955 before_unload_end_time));
990 } 956 }
991 957
992 void RenderFrameImpl::OnSwapOut(int proxy_routing_id) { 958 void RenderFrameImpl::OnSwapOut(int proxy_routing_id) {
993 RenderFrameProxy* proxy = NULL; 959 RenderFrameProxy* proxy = NULL;
994 bool is_site_per_process =
995 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess);
996 960
997 // Only run unload if we're not swapped out yet, but send the ack either way. 961 // Only run unload if we're not swapped out yet, but send the ack either way.
998 if (!is_swapped_out_ || !render_view_->is_swapped_out_) { 962 if (!is_swapped_out_ || !render_view_->is_swapped_out_) {
999 // Swap this RenderFrame out so the frame can navigate to a page rendered by 963 // Swap this RenderFrame out so the frame can navigate to a page rendered by
1000 // a different process. This involves running the unload handler and 964 // a different process. This involves running the unload handler and
1001 // clearing the page. Once WasSwappedOut is called, we also allow this 965 // clearing the page. Once WasSwappedOut is called, we also allow this
1002 // process to exit if there are no other active RenderFrames in it. 966 // process to exit if there are no other active RenderFrames in it.
1003 967
1004 // Send an UpdateState message before we get swapped out. Create the 968 // Send an UpdateState message before we get swapped out. Create the
1005 // RenderFrameProxy as well so its routing id is registered for receiving 969 // RenderFrameProxy as well so its routing id is registered for receiving
1006 // IPC messages. 970 // IPC messages.
1007 render_view_->SyncNavigationState(); 971 render_view_->SyncNavigationState();
1008 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this, 972 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this,
1009 proxy_routing_id); 973 proxy_routing_id);
1010 974
1011 // Synchronously run the unload handler before sending the ACK. 975 // Synchronously run the unload handler before sending the ACK.
1012 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support 976 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support
1013 // unload on subframes as well. 977 // unload on subframes as well.
1014 if (!frame_->parent()) 978 if (!frame_->parent())
1015 frame_->dispatchUnloadEvent(); 979 frame_->dispatchUnloadEvent();
1016 980
1017 // Swap out and stop sending any IPC messages that are not ACKs. 981 // Swap out and stop sending any IPC messages that are not ACKs.
1018 // TODO(nasko): Do we need RenderFrameImpl::is_swapped_out_ anymore?
1019 if (!frame_->parent()) 982 if (!frame_->parent())
1020 render_view_->SetSwappedOut(true); 983 render_view_->SetSwappedOut(true);
1021 is_swapped_out_ = true; 984 is_swapped_out_ = true;
1022 985
1023 // Now that we're swapped out and filtering IPC messages, stop loading to 986 // Now that we're swapped out and filtering IPC messages, stop loading to
1024 // ensure that no other in-progress navigation continues. We do this here 987 // ensure that no other in-progress navigation continues. We do this here
1025 // to avoid sending a DidStopLoading message to the browser process. 988 // to avoid sending a DidStopLoading message to the browser process.
1026 // TODO(creis): Should we be stopping all frames here and using 989 // TODO(creis): Should we be stopping all frames here and using
1027 // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this 990 // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this
1028 // frame? 991 // frame?
1029 if (!frame_->parent()) 992 if (!frame_->parent())
1030 render_view_->OnStop(); 993 render_view_->OnStop();
1031 else 994 else
1032 frame_->stopLoading(); 995 frame_->stopLoading();
1033 996
1034 // Let subframes know that the frame is now rendered remotely, for the 997 // Let subframes know that the frame is now rendered remotely, for the
1035 // purposes of compositing and input events. 998 // purposes of compositing and input events.
1036 if (frame_->parent()) 999 if (frame_->parent())
1037 frame_->setIsRemote(true); 1000 frame_->setIsRemote(true);
1038 1001
1039 // Replace the page with a blank dummy URL. The unload handler will not be 1002 // Replace the page with a blank dummy URL. The unload handler will not be
1040 // run a second time, thanks to a check in FrameLoader::stopLoading. 1003 // run a second time, thanks to a check in FrameLoader::stopLoading.
1041 // TODO(creis): Need to add a better way to do this that avoids running the 1004 // TODO(creis): Need to add a better way to do this that avoids running the
1042 // beforeunload handler. For now, we just run it a second time silently. 1005 // beforeunload handler. For now, we just run it a second time silently.
1043 if (!is_site_per_process || frame_->parent() == NULL) 1006 render_view_->NavigateToSwappedOutURL(frame_);
1044 render_view_->NavigateToSwappedOutURL(frame_);
1045 1007
1046 // Let WebKit know that this view is hidden so it can drop resources and 1008 // Let WebKit know that this view is hidden so it can drop resources and
1047 // stop compositing. 1009 // stop compositing.
1048 // TODO(creis): Support this for subframes as well. 1010 // TODO(creis): Support this for subframes as well.
1049 if (!frame_->parent()) { 1011 if (!frame_->parent()) {
1050 render_view_->webview()->setVisibilityState( 1012 render_view_->webview()->setVisibilityState(
1051 blink::WebPageVisibilityStateHidden, false); 1013 blink::WebPageVisibilityStateHidden, false);
1052 } 1014 }
1053 } 1015 }
1054 1016
1055 // It is now safe to show modal dialogs again. 1017 // It is now safe to show modal dialogs again.
1056 // TODO(creis): Deal with modal dialogs from subframes. 1018 // TODO(creis): Deal with modal dialogs from subframes.
1057 if (!frame_->parent()) 1019 if (!frame_->parent())
1058 render_view_->suppress_dialogs_until_swap_out_ = false; 1020 render_view_->suppress_dialogs_until_swap_out_ = false;
1059 1021
1060 Send(new FrameHostMsg_SwapOut_ACK(routing_id_)); 1022 Send(new FrameHostMsg_SwapOut_ACK(routing_id_));
1061 1023
1062 // Now that all of the cleanup is complete and the browser side is notified, 1024 // Now that all of the cleanup is complete and the browser side is notified,
1063 // start using the RenderFrameProxy, if one is created. 1025 // start using the RenderFrameProxy, if one is created.
1064 if (proxy) { 1026 if (proxy)
1065 if (frame_->parent()) { 1027 set_render_frame_proxy(proxy);
1066 frame_->swap(proxy->web_frame());
1067 if (is_site_per_process) {
1068 // TODO(nasko): delete the frame here, since we've replaced it with a
1069 // proxy.
1070 }
1071 } else {
1072 set_render_frame_proxy(proxy);
1073 }
1074 }
1075 } 1028 }
1076 1029
1077 void RenderFrameImpl::OnContextMenuClosed( 1030 void RenderFrameImpl::OnContextMenuClosed(
1078 const CustomContextMenuContext& custom_context) { 1031 const CustomContextMenuContext& custom_context) {
1079 if (custom_context.request_id) { 1032 if (custom_context.request_id) {
1080 // External request, should be in our map. 1033 // External request, should be in our map.
1081 ContextMenuClient* client = 1034 ContextMenuClient* client =
1082 pending_context_menus_.Lookup(custom_context.request_id); 1035 pending_context_menus_.Lookup(custom_context.request_id);
1083 if (client) { 1036 if (client) {
1084 client->OnMenuClosed(custom_context.request_id); 1037 client->OnMenuClosed(custom_context.request_id);
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
1869 // handle loading of error pages. 1822 // handle loading of error pages.
1870 document_state->navigation_state()->set_transition_type( 1823 document_state->navigation_state()->set_transition_type(
1871 PAGE_TRANSITION_AUTO_SUBFRAME); 1824 PAGE_TRANSITION_AUTO_SUBFRAME);
1872 } 1825 }
1873 1826
1874 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), 1827 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
1875 DidStartProvisionalLoad(frame)); 1828 DidStartProvisionalLoad(frame));
1876 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); 1829 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
1877 1830
1878 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( 1831 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(
1879 routing_id_, ds->request().url(), is_transition_navigation)); 1832 routing_id_, ds->request().url(), is_transition_navigation));
1880 } 1833 }
1881 1834
1882 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( 1835 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
1883 blink::WebLocalFrame* frame) { 1836 blink::WebLocalFrame* frame) {
1884 DCHECK(!frame_ || frame_ == frame); 1837 DCHECK(!frame_ || frame_ == frame);
1885 render_view_->history_controller()->RemoveChildrenForRedirect(this); 1838 render_view_->history_controller()->RemoveChildrenForRedirect(this);
1886 if (frame->parent()) 1839 if (frame->parent())
1887 return; 1840 return;
1888 // Received a redirect on the main frame. 1841 // Received a redirect on the main frame.
1889 WebDataSource* data_source = frame->provisionalDataSource(); 1842 WebDataSource* data_source = frame->provisionalDataSource();
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
2449 // The request my be empty during tests. 2402 // The request my be empty during tests.
2450 if (request.url().isEmpty()) 2403 if (request.url().isEmpty())
2451 return; 2404 return;
2452 2405
2453 // Set the first party for cookies url if it has not been set yet (new 2406 // Set the first party for cookies url if it has not been set yet (new
2454 // requests). For redirects, it is updated by WebURLLoaderImpl. 2407 // requests). For redirects, it is updated by WebURLLoaderImpl.
2455 if (request.firstPartyForCookies().isEmpty()) { 2408 if (request.firstPartyForCookies().isEmpty()) {
2456 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel) { 2409 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel) {
2457 request.setFirstPartyForCookies(request.url()); 2410 request.setFirstPartyForCookies(request.url());
2458 } else { 2411 } else {
2459 // TODO(nasko): When the top-level frame is remote, there is no document. 2412 request.setFirstPartyForCookies(
2460 // This is broken and should be fixed to propagate the first party. 2413 frame->top()->document().firstPartyForCookies());
2461 WebFrame* top = frame->top();
2462 if (top->isWebLocalFrame()) {
2463 request.setFirstPartyForCookies(
2464 frame->top()->document().firstPartyForCookies());
2465 }
2466 } 2414 }
2467 } 2415 }
2468 2416
2469 WebFrame* top_frame = frame->top(); 2417 WebFrame* top_frame = frame->top();
2470 // TODO(nasko): Hack around asking about top-frame data source. This means 2418 if (!top_frame)
2471 // for out-of-process iframes we are treating the current frame as the
2472 // top-level frame, which is wrong.
2473 if (!top_frame || top_frame->isWebRemoteFrame())
2474 top_frame = frame; 2419 top_frame = frame;
2475 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); 2420 WebDataSource* provisional_data_source = top_frame->provisionalDataSource();
2476 WebDataSource* top_data_source = top_frame->dataSource(); 2421 WebDataSource* top_data_source = top_frame->dataSource();
2477 WebDataSource* data_source = 2422 WebDataSource* data_source =
2478 provisional_data_source ? provisional_data_source : top_data_source; 2423 provisional_data_source ? provisional_data_source : top_data_source;
2479 2424
2480 PageTransition transition_type = PAGE_TRANSITION_LINK; 2425 PageTransition transition_type = PAGE_TRANSITION_LINK;
2481 DocumentState* document_state = DocumentState::FromDataSource(data_source); 2426 DocumentState* document_state = DocumentState::FromDataSource(data_source);
2482 DCHECK(document_state); 2427 DCHECK(document_state);
2483 InternalDocumentStateData* internal_data = 2428 InternalDocumentStateData* internal_data =
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2557 DocumentState::FromDataSource(frame->provisionalDataSource())); 2502 DocumentState::FromDataSource(frame->provisionalDataSource()));
2558 provider_id = provider->provider_id(); 2503 provider_id = provider->provider_id();
2559 } 2504 }
2560 } else if (frame->dataSource()) { 2505 } else if (frame->dataSource()) {
2561 ServiceWorkerNetworkProvider* provider = 2506 ServiceWorkerNetworkProvider* provider =
2562 ServiceWorkerNetworkProvider::FromDocumentState( 2507 ServiceWorkerNetworkProvider::FromDocumentState(
2563 DocumentState::FromDataSource(frame->dataSource())); 2508 DocumentState::FromDataSource(frame->dataSource()));
2564 provider_id = provider->provider_id(); 2509 provider_id = provider->provider_id();
2565 } 2510 }
2566 2511
2567 WebFrame* parent = frame->parent(); 2512 int parent_routing_id = frame->parent() ?
2568 int parent_routing_id = MSG_ROUTING_NONE; 2513 FromWebFrame(frame->parent())->GetRoutingID() : -1;
2569 if (!parent) {
2570 parent_routing_id = -1;
2571 } else if (parent->isWebLocalFrame()) {
2572 parent_routing_id = FromWebFrame(parent)->GetRoutingID();
2573 } else {
2574 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id();
2575 }
2576
2577 RequestExtraData* extra_data = new RequestExtraData(); 2514 RequestExtraData* extra_data = new RequestExtraData();
2578 extra_data->set_visibility_state(render_view_->visibilityState()); 2515 extra_data->set_visibility_state(render_view_->visibilityState());
2579 extra_data->set_custom_user_agent(custom_user_agent); 2516 extra_data->set_custom_user_agent(custom_user_agent);
2580 extra_data->set_render_frame_id(routing_id_); 2517 extra_data->set_render_frame_id(routing_id_);
2581 extra_data->set_is_main_frame(frame == top_frame); 2518 extra_data->set_is_main_frame(frame == top_frame);
2582 extra_data->set_frame_origin( 2519 extra_data->set_frame_origin(
2583 GURL(frame->document().securityOrigin().toString())); 2520 GURL(frame->document().securityOrigin().toString()));
2584 extra_data->set_parent_is_main_frame(frame->parent() == top_frame); 2521 extra_data->set_parent_is_main_frame(frame->parent() == top_frame);
2585 extra_data->set_parent_render_frame_id(parent_routing_id); 2522 extra_data->set_parent_render_frame_id(parent_routing_id);
2586 extra_data->set_allow_download(navigation_state->allow_download()); 2523 extra_data->set_allow_download(navigation_state->allow_download());
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
3280 info.urlRequest, 3217 info.urlRequest,
3281 info.navigationType, 3218 info.navigationType,
3282 info.defaultPolicy, 3219 info.defaultPolicy,
3283 info.isRedirect)) { 3220 info.isRedirect)) {
3284 return blink::WebNavigationPolicyIgnore; 3221 return blink::WebNavigationPolicyIgnore;
3285 } 3222 }
3286 #endif 3223 #endif
3287 3224
3288 Referrer referrer(RenderViewImpl::GetReferrerFromRequest(info.frame, 3225 Referrer referrer(RenderViewImpl::GetReferrerFromRequest(info.frame,
3289 info.urlRequest)); 3226 info.urlRequest));
3290 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
3291 3227
3292 bool is_subframe = !!info.frame->parent(); 3228 if (is_swapped_out_ || render_view_->is_swapped_out()) {
3293 3229 if (info.urlRequest.url() != GURL(kSwappedOutURL)) {
3294 if (command_line.HasSwitch(switches::kSitePerProcess) && is_subframe) { 3230 // Targeted links may try to navigate a swapped out frame. Allow the
3295 // There's no reason to ignore navigations on subframes, since the swap out 3231 // browser process to navigate the tab instead. Note that it is also
3296 // logic no longer applies. 3232 // possible for non-targeted navigations (from this view) to arrive
3297 } else { 3233 // here just after we are swapped out. It's ok to send them to the
3298 if (is_swapped_out_ || render_view_->is_swapped_out()) { 3234 // browser, as long as they're for the top level frame.
3299 if (info.urlRequest.url() != GURL(kSwappedOutURL)) { 3235 // TODO(creis): Ensure this supports targeted form submissions when
3300 // Targeted links may try to navigate a swapped out frame. Allow the 3236 // fixing http://crbug.com/101395.
3301 // browser process to navigate the tab instead. Note that it is also 3237 if (info.frame->parent() == NULL) {
3302 // possible for non-targeted navigations (from this view) to arrive 3238 OpenURL(info.frame, info.urlRequest.url(), referrer,
3303 // here just after we are swapped out. It's ok to send them to the 3239 info.defaultPolicy);
3304 // browser, as long as they're for the top level frame. 3240 return blink::WebNavigationPolicyIgnore; // Suppress the load here.
3305 // TODO(creis): Ensure this supports targeted form submissions when
3306 // fixing http://crbug.com/101395.
3307 if (info.frame->parent() == NULL) {
3308 OpenURL(info.frame, info.urlRequest.url(), referrer,
3309 info.defaultPolicy);
3310 return blink::WebNavigationPolicyIgnore; // Suppress the load here.
3311 }
3312
3313 // We should otherwise ignore in-process iframe navigations, if they
3314 // arrive just after we are swapped out.
3315 return blink::WebNavigationPolicyIgnore;
3316 } 3241 }
3317 3242
3318 // Allow kSwappedOutURL to complete. 3243 // We should otherwise ignore in-process iframe navigations, if they
3319 return info.defaultPolicy; 3244 // arrive just after we are swapped out.
3245 return blink::WebNavigationPolicyIgnore;
3320 } 3246 }
3247
3248 // Allow kSwappedOutURL to complete.
3249 return info.defaultPolicy;
3321 } 3250 }
3322 3251
3323 // Webkit is asking whether to navigate to a new URL. 3252 // Webkit is asking whether to navigate to a new URL.
3324 // This is fine normally, except if we're showing UI from one security 3253 // This is fine normally, except if we're showing UI from one security
3325 // context and they're trying to navigate to a different context. 3254 // context and they're trying to navigate to a different context.
3326 const GURL& url = info.urlRequest.url(); 3255 const GURL& url = info.urlRequest.url();
3327 3256
3328 // A content initiated navigation may have originated from a link-click, 3257 // A content initiated navigation may have originated from a link-click,
3329 // script, drag-n-drop operation, etc. 3258 // script, drag-n-drop operation, etc.
3330 bool is_content_initiated = static_cast<DocumentState*>(info.extraData)-> 3259 bool is_content_initiated = static_cast<DocumentState*>(info.extraData)->
3331 navigation_state()->is_content_initiated(); 3260 navigation_state()->is_content_initiated();
3332 3261
3333 // Experimental: 3262 // Experimental:
3334 // If --enable-strict-site-isolation or --site-per-process is enabled, send 3263 // If --enable-strict-site-isolation or --site-per-process is enabled, send
3335 // all top-level navigations to the browser to let it swap processes when 3264 // all top-level navigations to the browser to let it swap processes when
3336 // crossing site boundaries. This is currently expected to break some script 3265 // crossing site boundaries. This is currently expected to break some script
3337 // calls and navigations, such as form submissions. 3266 // calls and navigations, such as form submissions.
3267 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
3338 bool force_swap_due_to_flag = 3268 bool force_swap_due_to_flag =
3339 command_line.HasSwitch(switches::kEnableStrictSiteIsolation) || 3269 command_line.HasSwitch(switches::kEnableStrictSiteIsolation) ||
3340 command_line.HasSwitch(switches::kSitePerProcess); 3270 command_line.HasSwitch(switches::kSitePerProcess);
3341 if (force_swap_due_to_flag && 3271 if (force_swap_due_to_flag &&
3342 !info.frame->parent() && (is_content_initiated || info.isRedirect)) { 3272 !info.frame->parent() && (is_content_initiated || info.isRedirect)) {
3343 WebString origin_str = info.frame->document().securityOrigin().toString(); 3273 WebString origin_str = info.frame->document().securityOrigin().toString();
3344 GURL frame_url(origin_str.utf8().data()); 3274 GURL frame_url(origin_str.utf8().data());
3345 // TODO(cevans): revisit whether this site check is still necessary once 3275 // TODO(cevans): revisit whether this site check is still necessary once
3346 // crbug.com/101395 is fixed. 3276 // crbug.com/101395 is fixed.
3347 bool same_domain_or_host = 3277 bool same_domain_or_host =
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
3704 3634
3705 #if defined(ENABLE_BROWSER_CDMS) 3635 #if defined(ENABLE_BROWSER_CDMS)
3706 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 3636 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
3707 if (!cdm_manager_) 3637 if (!cdm_manager_)
3708 cdm_manager_ = new RendererCdmManager(this); 3638 cdm_manager_ = new RendererCdmManager(this);
3709 return cdm_manager_; 3639 return cdm_manager_;
3710 } 3640 }
3711 #endif // defined(ENABLE_BROWSER_CDMS) 3641 #endif // defined(ENABLE_BROWSER_CDMS)
3712 3642
3713 } // namespace content 3643 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_frame_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698