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

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

Issue 1202593002: Move browser-to-renderer opener plumbing to frame routing IDs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@opener-create-opener-render-views
Patch Set: Remove suppress_opener Created 5 years, 5 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/public/test/test_renderer_host.h ('k') | content/test/data/post_message.html » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 &blink_settings); 604 &blink_settings);
605 for (const std::string& setting : blink_settings) { 605 for (const std::string& setting : blink_settings) {
606 size_t pos = setting.find('='); 606 size_t pos = setting.find('=');
607 settings->setFromStrings( 607 settings->setFromStrings(
608 blink::WebString::fromLatin1(setting.substr(0, pos)), 608 blink::WebString::fromLatin1(setting.substr(0, pos)),
609 blink::WebString::fromLatin1( 609 blink::WebString::fromLatin1(
610 pos == std::string::npos ? "" : setting.substr(pos + 1))); 610 pos == std::string::npos ? "" : setting.substr(pos + 1)));
611 } 611 }
612 } 612 }
613 613
614 // Looks up and returns the WebFrame corresponding to a given opener frame
615 // routing ID. Also stores the opener's RenderView routing ID into
616 // |opener_view_routing_id|.
617 WebFrame* ResolveOpener(int opener_frame_routing_id,
618 int* opener_view_routing_id) {
619 *opener_view_routing_id = MSG_ROUTING_NONE;
620 if (opener_frame_routing_id == MSG_ROUTING_NONE)
621 return nullptr;
622
623 // Opener routing ID could refer to either a RenderFrameProxy or a
624 // RenderFrame, so need to check both.
625 RenderFrameProxy* opener_proxy =
626 RenderFrameProxy::FromRoutingID(opener_frame_routing_id);
627 if (opener_proxy) {
628 *opener_view_routing_id = opener_proxy->render_view()->GetRoutingID();
629
630 // TODO(nasko,alexmos): This check won't be needed once swapped-out:// is
631 // gone.
632 if (opener_proxy->IsMainFrameDetachedFromTree()) {
633 DCHECK(!RenderFrameProxy::IsSwappedOutStateForbidden());
634 return opener_proxy->render_view()->webview()->mainFrame();
635 } else {
636 return opener_proxy->web_frame();
637 }
638 }
639
640 RenderFrameImpl* opener_frame =
641 RenderFrameImpl::FromRoutingID(opener_frame_routing_id);
642 if (opener_frame) {
643 *opener_view_routing_id = opener_frame->render_view()->GetRoutingID();
644 return opener_frame->GetWebFrame();
645 }
646
647 return nullptr;
648 }
649
614 } // namespace 650 } // namespace
615 651
616 RenderViewImpl::RenderViewImpl(const ViewMsg_New_Params& params) 652 RenderViewImpl::RenderViewImpl(const ViewMsg_New_Params& params)
617 : RenderWidget(blink::WebPopupTypeNone, 653 : RenderWidget(blink::WebPopupTypeNone,
618 params.initial_size.screen_info, 654 params.initial_size.screen_info,
619 params.swapped_out, 655 params.swapped_out,
620 params.hidden, 656 params.hidden,
621 params.never_visible), 657 params.never_visible),
622 webkit_preferences_(params.web_preferences), 658 webkit_preferences_(params.web_preferences),
623 send_content_state_immediately_(false), 659 send_content_state_immediately_(false),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 enumeration_completion_id_(0), 691 enumeration_completion_id_(0),
656 session_storage_namespace_id_(params.session_storage_namespace_id), 692 session_storage_namespace_id_(params.session_storage_namespace_id),
657 page_scale_factor_is_one_(true) { 693 page_scale_factor_is_one_(true) {
658 } 694 }
659 695
660 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, 696 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
661 CompositorDependencies* compositor_deps, 697 CompositorDependencies* compositor_deps,
662 bool was_created_by_renderer) { 698 bool was_created_by_renderer) {
663 routing_id_ = params.view_id; 699 routing_id_ = params.view_id;
664 surface_id_ = params.surface_id; 700 surface_id_ = params.surface_id;
665 if (params.opener_route_id != MSG_ROUTING_NONE && was_created_by_renderer) 701
666 opener_id_ = params.opener_route_id; 702 int opener_view_routing_id;
703 WebFrame* opener_frame =
704 ResolveOpener(params.opener_frame_route_id, &opener_view_routing_id);
705 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer)
706 opener_id_ = opener_view_routing_id;
707
667 display_mode_= params.initial_size.display_mode; 708 display_mode_= params.initial_size.display_mode;
668 709
669 // Ensure we start with a valid next_page_id_ from the browser. 710 // Ensure we start with a valid next_page_id_ from the browser.
670 DCHECK_GE(next_page_id_, 0); 711 DCHECK_GE(next_page_id_, 0);
671 712
672 if (params.main_frame_routing_id != MSG_ROUTING_NONE) { 713 if (params.main_frame_routing_id != MSG_ROUTING_NONE) {
673 main_render_frame_ = RenderFrameImpl::Create( 714 main_render_frame_ = RenderFrameImpl::Create(
674 this, params.main_frame_routing_id); 715 this, params.main_frame_routing_id);
675 // The main frame WebLocalFrame object is closed by 716 // The main frame WebLocalFrame object is closed by
676 // RenderFrameImpl::frameDetached(). 717 // RenderFrameImpl::frameDetached().
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 852
812 new IdleUserDetector(this); 853 new IdleUserDetector(this);
813 854
814 if (command_line.HasSwitch(switches::kDomAutomationController)) 855 if (command_line.HasSwitch(switches::kDomAutomationController))
815 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; 856 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION;
816 if (command_line.HasSwitch(switches::kStatsCollectionController)) 857 if (command_line.HasSwitch(switches::kStatsCollectionController))
817 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION; 858 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION;
818 859
819 GetContentClient()->renderer()->RenderViewCreated(this); 860 GetContentClient()->renderer()->RenderViewCreated(this);
820 861
821 // If we have an opener_id but we weren't created by a renderer, then 862 // If we have an opener_frame but we weren't created by a renderer, then it's
822 // it's the browser asking us to set our opener to another RenderView. 863 // the browser asking us to set our opener to another frame.
823 if (params.opener_route_id != MSG_ROUTING_NONE && !was_created_by_renderer) { 864 if (opener_frame && !was_created_by_renderer)
824 RenderViewImpl* opener_view = FromRoutingID(params.opener_route_id); 865 webview()->mainFrame()->setOpener(opener_frame);
825 if (opener_view)
826 webview()->mainFrame()->setOpener(opener_view->webview()->mainFrame());
827 }
828 866
829 // If we are initially swapped out, navigate to kSwappedOutURL. 867 // If we are initially swapped out, navigate to kSwappedOutURL.
830 // This ensures we are in a unique origin that others cannot script. 868 // This ensures we are in a unique origin that others cannot script.
831 if (is_swapped_out_ && webview()->mainFrame()->isWebLocalFrame()) 869 if (is_swapped_out_ && webview()->mainFrame()->isWebLocalFrame())
832 main_render_frame_->NavigateToSwappedOutURL(); 870 main_render_frame_->NavigateToSwappedOutURL();
833 } 871 }
834 872
835 RenderViewImpl::~RenderViewImpl() { 873 RenderViewImpl::~RenderViewImpl() {
836 for (BitmapMap::iterator it = disambiguation_bitmaps_.begin(); 874 for (BitmapMap::iterator it = disambiguation_bitmaps_.begin();
837 it != disambiguation_bitmaps_.end(); 875 it != disambiguation_bitmaps_.end();
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after
1603 1641
1604 ViewMsg_Resize_Params initial_size = ViewMsg_Resize_Params(); 1642 ViewMsg_Resize_Params initial_size = ViewMsg_Resize_Params();
1605 initial_size.screen_info = screen_info_; 1643 initial_size.screen_info = screen_info_;
1606 1644
1607 // The initial hidden state for the RenderViewImpl here has to match what the 1645 // The initial hidden state for the RenderViewImpl here has to match what the
1608 // browser will eventually decide for the given disposition. Since we have to 1646 // browser will eventually decide for the given disposition. Since we have to
1609 // return from this call synchronously, we just have to make our best guess 1647 // return from this call synchronously, we just have to make our best guess
1610 // and rely on the browser sending a WasHidden / WasShown message if it 1648 // and rely on the browser sending a WasHidden / WasShown message if it
1611 // disagrees. 1649 // disagrees.
1612 ViewMsg_New_Params view_params; 1650 ViewMsg_New_Params view_params;
1613 view_params.opener_route_id = routing_id_; 1651
1652 RenderFrameImpl* creator_frame = RenderFrameImpl::FromWebFrame(creator);
1653 view_params.opener_frame_route_id = creator_frame->GetRoutingID();
1654 DCHECK_EQ(routing_id_, creator_frame->render_view()->GetRoutingID());
1655
1614 view_params.window_was_created_with_opener = true; 1656 view_params.window_was_created_with_opener = true;
1615 view_params.renderer_preferences = renderer_preferences_; 1657 view_params.renderer_preferences = renderer_preferences_;
1616 view_params.web_preferences = webkit_preferences_; 1658 view_params.web_preferences = webkit_preferences_;
1617 view_params.view_id = routing_id; 1659 view_params.view_id = routing_id;
1618 view_params.main_frame_routing_id = main_frame_routing_id; 1660 view_params.main_frame_routing_id = main_frame_routing_id;
1619 view_params.surface_id = surface_id; 1661 view_params.surface_id = surface_id;
1620 view_params.session_storage_namespace_id = 1662 view_params.session_storage_namespace_id =
1621 cloned_session_storage_namespace_id; 1663 cloned_session_storage_namespace_id;
1622 view_params.swapped_out = false; 1664 view_params.swapped_out = false;
1623 // WebCore will take care of setting the correct name. 1665 // WebCore will take care of setting the correct name.
(...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after
3796 std::vector<gfx::Size> sizes; 3838 std::vector<gfx::Size> sizes;
3797 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); 3839 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes);
3798 if (!url.isEmpty()) 3840 if (!url.isEmpty())
3799 urls.push_back( 3841 urls.push_back(
3800 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); 3842 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes));
3801 } 3843 }
3802 SendUpdateFaviconURL(urls); 3844 SendUpdateFaviconURL(urls);
3803 } 3845 }
3804 3846
3805 } // namespace content 3847 } // namespace content
OLDNEW
« no previous file with comments | « content/public/test/test_renderer_host.h ('k') | content/test/data/post_message.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698