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

Side by Side Diff: content/browser/renderer_host/render_view_host_impl.cc

Issue 2566583002: Change allowed bindings to be per RenderFrame instead of per RenderView. (Closed)
Patch Set: rebase Created 3 years, 10 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/browser/renderer_host/render_view_host_impl.h" 5 #include "content/browser/renderer_host/render_view_host_impl.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 SiteInstance* instance, 193 SiteInstance* instance,
194 std::unique_ptr<RenderWidgetHostImpl> widget, 194 std::unique_ptr<RenderWidgetHostImpl> widget,
195 RenderViewHostDelegate* delegate, 195 RenderViewHostDelegate* delegate,
196 int32_t main_frame_routing_id, 196 int32_t main_frame_routing_id,
197 bool swapped_out, 197 bool swapped_out,
198 bool has_initialized_audio_host) 198 bool has_initialized_audio_host)
199 : render_widget_host_(std::move(widget)), 199 : render_widget_host_(std::move(widget)),
200 frames_ref_count_(0), 200 frames_ref_count_(0),
201 delegate_(delegate), 201 delegate_(delegate),
202 instance_(static_cast<SiteInstanceImpl*>(instance)), 202 instance_(static_cast<SiteInstanceImpl*>(instance)),
203 enabled_bindings_(0),
204 is_active_(!swapped_out), 203 is_active_(!swapped_out),
205 is_swapped_out_(swapped_out), 204 is_swapped_out_(swapped_out),
206 main_frame_routing_id_(main_frame_routing_id), 205 main_frame_routing_id_(main_frame_routing_id),
207 is_waiting_for_close_ack_(false), 206 is_waiting_for_close_ack_(false),
208 sudden_termination_allowed_(false), 207 sudden_termination_allowed_(false),
209 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING), 208 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING),
210 updating_web_preferences_(false), 209 updating_web_preferences_(false),
211 render_view_ready_on_process_launch_(false), 210 render_view_ready_on_process_launch_(false),
212 weak_factory_(this) { 211 weak_factory_(this) {
213 DCHECK(instance_.get()); 212 DCHECK(instance_.get());
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 params->min_size = GetWidget()->min_size_for_auto_resize(); 310 params->min_size = GetWidget()->min_size_for_auto_resize();
312 params->max_size = GetWidget()->max_size_for_auto_resize(); 311 params->max_size = GetWidget()->max_size_for_auto_resize();
313 params->page_zoom_level = delegate_->GetPendingPageZoomLevel(); 312 params->page_zoom_level = delegate_->GetPendingPageZoomLevel();
314 params->image_decode_color_space = gfx::ICCProfile::FromBestMonitor(); 313 params->image_decode_color_space = gfx::ICCProfile::FromBestMonitor();
315 314
316 GetWidget()->GetResizeParams(&params->initial_size); 315 GetWidget()->GetResizeParams(&params->initial_size);
317 GetWidget()->SetInitialRenderSizeParams(params->initial_size); 316 GetWidget()->SetInitialRenderSizeParams(params->initial_size);
318 317
319 GetProcess()->GetRendererInterface()->CreateView(std::move(params)); 318 GetProcess()->GetRendererInterface()->CreateView(std::move(params));
320 319
321 // If it's enabled, tell the renderer to set up the Javascript bindings for
322 // sending messages back to the browser.
323 if (GetProcess()->IsForGuestsOnly())
324 DCHECK_EQ(0, enabled_bindings_);
325 Send(new ViewMsg_AllowBindings(GetRoutingID(), enabled_bindings_));
326 // Let our delegate know that we created a RenderView. 320 // Let our delegate know that we created a RenderView.
327 delegate_->RenderViewCreated(this); 321 delegate_->RenderViewCreated(this);
328 322
329 // Since this method can create the main RenderFrame in the renderer process, 323 // Since this method can create the main RenderFrame in the renderer process,
330 // set the proper state on its corresponding RenderFrameHost. 324 // set the proper state on its corresponding RenderFrameHost.
331 if (main_frame_routing_id_ != MSG_ROUTING_NONE) { 325 if (main_frame_routing_id_ != MSG_ROUTING_NONE) {
332 RenderFrameHostImpl::FromID(GetProcess()->GetID(), main_frame_routing_id_) 326 RenderFrameHostImpl::FromID(GetProcess()->GetID(), main_frame_routing_id_)
333 ->SetRenderFrameCreated(true); 327 ->SetRenderFrameCreated(true);
334 } 328 }
335 GetWidget()->delegate()->SendScreenRects(); 329 GetWidget()->delegate()->SendScreenRects();
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 } 633 }
640 634
641 int RenderViewHostImpl::GetRoutingID() const { 635 int RenderViewHostImpl::GetRoutingID() const {
642 return GetWidget()->GetRoutingID(); 636 return GetWidget()->GetRoutingID();
643 } 637 }
644 638
645 RenderFrameHost* RenderViewHostImpl::GetMainFrame() { 639 RenderFrameHost* RenderViewHostImpl::GetMainFrame() {
646 return RenderFrameHost::FromID(GetProcess()->GetID(), main_frame_routing_id_); 640 return RenderFrameHost::FromID(GetProcess()->GetID(), main_frame_routing_id_);
647 } 641 }
648 642
649 void RenderViewHostImpl::AllowBindings(int bindings_flags) {
650 // Never grant any bindings to browser plugin guests.
651 if (GetProcess()->IsForGuestsOnly()) {
652 NOTREACHED() << "Never grant bindings to a guest process.";
653 return;
654 }
655
656 // Ensure we aren't granting WebUI bindings to a process that has already
657 // been used for non-privileged views.
658 if (bindings_flags & BINDINGS_POLICY_WEB_UI &&
659 GetProcess()->HasConnection() &&
660 !ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
661 GetProcess()->GetID())) {
662 // This process has no bindings yet. Make sure it does not have more
663 // than this single active view.
664 // --single-process only has one renderer.
665 if (GetProcess()->GetActiveViewCount() > 1 &&
666 !base::CommandLine::ForCurrentProcess()->HasSwitch(
667 switches::kSingleProcess))
668 return;
669 }
670
671 if (bindings_flags & BINDINGS_POLICY_WEB_UI) {
672 ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings(
673 GetProcess()->GetID());
674 }
675
676 enabled_bindings_ |= bindings_flags;
677 if (GetWidget()->renderer_initialized())
678 Send(new ViewMsg_AllowBindings(GetRoutingID(), enabled_bindings_));
679 }
680
681 int RenderViewHostImpl::GetEnabledBindings() const {
682 return enabled_bindings_;
683 }
684
685 void RenderViewHostImpl::SetWebUIProperty(const std::string& name, 643 void RenderViewHostImpl::SetWebUIProperty(const std::string& name,
686 const std::string& value) { 644 const std::string& value) {
687 // This is a sanity check before telling the renderer to enable the property. 645 // This is a sanity check before telling the renderer to enable the property.
688 // It could lie and send the corresponding IPC messages anyway, but we will 646 // It could lie and send the corresponding IPC messages anyway, but we will
689 // not act on them if enabled_bindings_ doesn't agree. If we get here without 647 // not act on them if enabled_bindings_ doesn't agree. If we get here without
690 // WebUI bindings, kill the renderer process. 648 // WebUI bindings, kill the renderer process.
691 if (enabled_bindings_ & BINDINGS_POLICY_WEB_UI) { 649 if (GetMainFrame()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI) {
692 Send(new ViewMsg_SetWebUIProperty(GetRoutingID(), name, value)); 650 Send(new ViewMsg_SetWebUIProperty(GetRoutingID(), name, value));
693 } else { 651 } else {
694 RecordAction( 652 RecordAction(
695 base::UserMetricsAction("BindingsMismatchTerminate_RVH_WebUI")); 653 base::UserMetricsAction("BindingsMismatchTerminate_RVH_WebUI"));
696 GetProcess()->Shutdown(content::RESULT_CODE_KILLED, false); 654 GetProcess()->Shutdown(content::RESULT_CODE_KILLED, false);
697 } 655 }
698 } 656 }
699 657
700 void RenderViewHostImpl::RenderWidgetGotFocus() { 658 void RenderViewHostImpl::RenderWidgetGotFocus() {
701 RenderViewHostDelegateView* view = delegate_->GetDelegateView(); 659 RenderViewHostDelegateView* view = delegate_->GetDelegateView();
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 } else { 942 } else {
985 render_view_ready_on_process_launch_ = true; 943 render_view_ready_on_process_launch_ = true;
986 } 944 }
987 } 945 }
988 946
989 void RenderViewHostImpl::RenderViewReady() { 947 void RenderViewHostImpl::RenderViewReady() {
990 delegate_->RenderViewReady(this); 948 delegate_->RenderViewReady(this);
991 } 949 }
992 950
993 } // namespace content 951 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_view_host_impl.h ('k') | content/browser/renderer_host/render_view_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698