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

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

Issue 1303773002: Give the main frame a RenderWidget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: plumb through surface ID *and* widget surface ID for window.open Created 5 years, 3 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
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 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 pepper_last_mouse_event_target_(NULL), 658 pepper_last_mouse_event_target_(NULL),
659 #endif 659 #endif
660 enumeration_completion_id_(0), 660 enumeration_completion_id_(0),
661 session_storage_namespace_id_(params.session_storage_namespace_id), 661 session_storage_namespace_id_(params.session_storage_namespace_id),
662 page_scale_factor_is_one_(true) { 662 page_scale_factor_is_one_(true) {
663 } 663 }
664 664
665 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, 665 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
666 bool was_created_by_renderer) { 666 bool was_created_by_renderer) {
667 routing_id_ = params.view_id; 667 routing_id_ = params.view_id;
668 surface_id_ = params.surface_id; 668 surface_id_ = params.view_surface_id;
669 669
670 int opener_view_routing_id; 670 int opener_view_routing_id;
671 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( 671 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener(
672 params.opener_frame_route_id, &opener_view_routing_id); 672 params.opener_frame_route_id, &opener_view_routing_id);
673 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer) 673 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer)
674 opener_id_ = opener_view_routing_id; 674 opener_id_ = opener_view_routing_id;
675 675
676 display_mode_= params.initial_size.display_mode; 676 display_mode_= params.initial_size.display_mode;
677 677
678 // Ensure we start with a valid next_page_id_ from the browser. 678 // Ensure we start with a valid next_page_id_ from the browser.
679 DCHECK_GE(next_page_id_, 0); 679 DCHECK_GE(next_page_id_, 0);
680 680
681 webwidget_ = WebView::create(this); 681 webwidget_ = WebView::create(this);
682 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_)); 682 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
683 683
684 g_view_map.Get().insert(std::make_pair(webview(), this)); 684 g_view_map.Get().insert(std::make_pair(webview(), this));
685 g_routing_id_view_map.Get().insert(std::make_pair(routing_id_, this)); 685 g_routing_id_view_map.Get().insert(std::make_pair(routing_id_, this));
686 686
687 const base::CommandLine& command_line = 687 const base::CommandLine& command_line =
688 *base::CommandLine::ForCurrentProcess(); 688 *base::CommandLine::ForCurrentProcess();
689 689
690 if (command_line.HasSwitch(switches::kStatsCollectionController)) 690 if (command_line.HasSwitch(switches::kStatsCollectionController))
691 stats_collection_observer_.reset(new StatsCollectionObserver(this)); 691 stats_collection_observer_.reset(new StatsCollectionObserver(this));
692 692
693 if (params.main_frame_routing_id != MSG_ROUTING_NONE) { 693 if (params.main_frame_routing_id != MSG_ROUTING_NONE) {
694 main_render_frame_ = 694 main_render_frame_ = RenderFrameImpl::CreateMainFrame(
695 RenderFrameImpl::CreateMainFrame(this, params.main_frame_routing_id); 695 this, params.main_frame_routing_id, params.main_frame_widget_routing_id,
696 params.widget_surface_id, params.hidden, screen_info(),
697 compositor_deps_);
696 } 698 }
697 699
698 if (params.proxy_routing_id != MSG_ROUTING_NONE) { 700 if (params.proxy_routing_id != MSG_ROUTING_NONE) {
699 CHECK(params.swapped_out); 701 CHECK(params.swapped_out);
700 if (main_render_frame_) { 702 if (main_render_frame_) {
701 DCHECK(!SiteIsolationPolicy::IsSwappedOutStateForbidden()); 703 DCHECK(!SiteIsolationPolicy::IsSwappedOutStateForbidden());
702 RenderFrameProxy* proxy = RenderFrameProxy::CreateProxyToReplaceFrame( 704 RenderFrameProxy* proxy = RenderFrameProxy::CreateProxyToReplaceFrame(
703 main_render_frame_, params.proxy_routing_id, 705 main_render_frame_, params.proxy_routing_id,
704 blink::WebTreeScopeType::Document); 706 blink::WebTreeScopeType::Document);
705 main_render_frame_->set_render_frame_proxy(proxy); 707 main_render_frame_->set_render_frame_proxy(proxy);
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
1587 params.disposition = NavigationPolicyToDisposition(policy); 1589 params.disposition = NavigationPolicyToDisposition(policy);
1588 if (!request.isNull()) { 1590 if (!request.isNull()) {
1589 params.target_url = request.url(); 1591 params.target_url = request.url();
1590 params.referrer = GetReferrerFromRequest(creator, request); 1592 params.referrer = GetReferrerFromRequest(creator, request);
1591 } 1593 }
1592 params.features = features; 1594 params.features = features;
1593 1595
1594 for (size_t i = 0; i < features.additionalFeatures.size(); ++i) 1596 for (size_t i = 0; i < features.additionalFeatures.size(); ++i)
1595 params.additional_features.push_back(features.additionalFeatures[i]); 1597 params.additional_features.push_back(features.additionalFeatures[i]);
1596 1598
1597 int32 routing_id = MSG_ROUTING_NONE; 1599 ViewHostMsg_CreateWindow_Reply reply;
1598 int32 main_frame_routing_id = MSG_ROUTING_NONE; 1600 RenderThread::Get()->Send(new ViewHostMsg_CreateWindow(params, &reply));
1599 int32 surface_id = 0; 1601 if (reply.route_id == MSG_ROUTING_NONE)
1600 int64 cloned_session_storage_namespace_id = 0;
1601
1602 RenderThread::Get()->Send(new ViewHostMsg_CreateWindow(
1603 params, &routing_id, &main_frame_routing_id, &surface_id,
1604 &cloned_session_storage_namespace_id));
1605 if (routing_id == MSG_ROUTING_NONE)
1606 return NULL; 1602 return NULL;
1607 1603
1608 WebUserGestureIndicator::consumeUserGesture(); 1604 WebUserGestureIndicator::consumeUserGesture();
1609 1605
1610 // While this view may be a background extension page, it can spawn a visible 1606 // While this view may be a background extension page, it can spawn a visible
1611 // render view. So we just assume that the new one is not another background 1607 // render view. So we just assume that the new one is not another background
1612 // page instead of passing on our own value. 1608 // page instead of passing on our own value.
1613 // TODO(vangelis): Can we tell if the new view will be a background page? 1609 // TODO(vangelis): Can we tell if the new view will be a background page?
1614 bool never_visible = false; 1610 bool never_visible = false;
1615 1611
1616 ViewMsg_Resize_Params initial_size = ViewMsg_Resize_Params(); 1612 ViewMsg_Resize_Params initial_size = ViewMsg_Resize_Params();
1617 initial_size.screen_info = screen_info_; 1613 initial_size.screen_info = screen_info_;
1618 1614
1619 // The initial hidden state for the RenderViewImpl here has to match what the 1615 // The initial hidden state for the RenderViewImpl here has to match what the
1620 // browser will eventually decide for the given disposition. Since we have to 1616 // browser will eventually decide for the given disposition. Since we have to
1621 // return from this call synchronously, we just have to make our best guess 1617 // return from this call synchronously, we just have to make our best guess
1622 // and rely on the browser sending a WasHidden / WasShown message if it 1618 // and rely on the browser sending a WasHidden / WasShown message if it
1623 // disagrees. 1619 // disagrees.
1624 ViewMsg_New_Params view_params; 1620 ViewMsg_New_Params view_params;
1625 1621
1626 RenderFrameImpl* creator_frame = RenderFrameImpl::FromWebFrame(creator); 1622 RenderFrameImpl* creator_frame = RenderFrameImpl::FromWebFrame(creator);
1627 view_params.opener_frame_route_id = creator_frame->GetRoutingID(); 1623 view_params.opener_frame_route_id = creator_frame->GetRoutingID();
1628 DCHECK_EQ(routing_id_, creator_frame->render_view()->GetRoutingID()); 1624 DCHECK_EQ(routing_id_, creator_frame->render_view()->GetRoutingID());
1629 1625
1630 view_params.window_was_created_with_opener = true; 1626 view_params.window_was_created_with_opener = true;
1631 view_params.renderer_preferences = renderer_preferences_; 1627 view_params.renderer_preferences = renderer_preferences_;
1632 view_params.web_preferences = webkit_preferences_; 1628 view_params.web_preferences = webkit_preferences_;
1633 view_params.view_id = routing_id; 1629 view_params.view_id = reply.route_id;
1634 view_params.main_frame_routing_id = main_frame_routing_id; 1630 view_params.view_surface_id = reply.surface_id;
1635 view_params.surface_id = surface_id; 1631 view_params.main_frame_routing_id = reply.main_frame_route_id;
1632 view_params.main_frame_widget_routing_id = reply.main_frame_widget_route_id;
1633 view_params.widget_surface_id = reply.widget_surface_id;
1636 view_params.session_storage_namespace_id = 1634 view_params.session_storage_namespace_id =
1637 cloned_session_storage_namespace_id; 1635 reply.cloned_session_storage_namespace_id;
1638 view_params.swapped_out = false; 1636 view_params.swapped_out = false;
1639 // WebCore will take care of setting the correct name. 1637 // WebCore will take care of setting the correct name.
1640 view_params.replicated_frame_state = FrameReplicationState(); 1638 view_params.replicated_frame_state = FrameReplicationState();
1641 view_params.proxy_routing_id = MSG_ROUTING_NONE;
1642 view_params.hidden = (params.disposition == NEW_BACKGROUND_TAB); 1639 view_params.hidden = (params.disposition == NEW_BACKGROUND_TAB);
1643 view_params.never_visible = never_visible; 1640 view_params.never_visible = never_visible;
1644 view_params.next_page_id = 1; 1641 view_params.next_page_id = 1;
1645 view_params.initial_size = initial_size; 1642 view_params.initial_size = initial_size;
1646 view_params.enable_auto_resize = false; 1643 view_params.enable_auto_resize = false;
1647 view_params.min_size = gfx::Size(); 1644 view_params.min_size = gfx::Size();
1648 view_params.max_size = gfx::Size(); 1645 view_params.max_size = gfx::Size();
1649 1646
1650 RenderViewImpl* view = 1647 RenderViewImpl* view =
1651 RenderViewImpl::Create(compositor_deps_, view_params, true); 1648 RenderViewImpl::Create(compositor_deps_, view_params, true);
(...skipping 2131 matching lines...) Expand 10 before | Expand all | Expand 10 after
3783 std::vector<gfx::Size> sizes; 3780 std::vector<gfx::Size> sizes;
3784 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); 3781 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes);
3785 if (!url.isEmpty()) 3782 if (!url.isEmpty())
3786 urls.push_back( 3783 urls.push_back(
3787 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); 3784 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes));
3788 } 3785 }
3789 SendUpdateFaviconURL(urls); 3786 SendUpdateFaviconURL(urls);
3790 } 3787 }
3791 3788
3792 } // namespace content 3789 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698