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

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

Issue 177713006: Revert 251563 "Move browser initiated navigation from RenderView..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 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 | Annotate | Revision Log
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 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 bool guest_compositing_enabled = !command_line.HasSwitch( 558 bool guest_compositing_enabled = !command_line.HasSwitch(
559 switches::kDisableBrowserPluginCompositing); 559 switches::kDisableBrowserPluginCompositing);
560 if (GetProcess()->IsGuest() && !guest_compositing_enabled) { 560 if (GetProcess()->IsGuest() && !guest_compositing_enabled) {
561 prefs.force_compositing_mode = false; 561 prefs.force_compositing_mode = false;
562 prefs.accelerated_compositing_enabled = false; 562 prefs.accelerated_compositing_enabled = false;
563 } 563 }
564 564
565 return prefs; 565 return prefs;
566 } 566 }
567 567
568 void RenderViewHostImpl::Navigate(const FrameMsg_Navigate_Params& params) { 568 void RenderViewHostImpl::Navigate(const ViewMsg_Navigate_Params& params) {
569 TRACE_EVENT0("renderer_host", "RenderViewHostImpl::Navigate"); 569 TRACE_EVENT0("renderer_host", "RenderViewHostImpl::Navigate");
570 delegate_->GetFrameTree()->GetMainFrame()->Navigate(params); 570 // Browser plugin guests are not allowed to navigate outside web-safe schemes,
571 // so do not grant them the ability to request additional URLs.
572 if (!GetProcess()->IsGuest()) {
573 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
574 GetProcess()->GetID(), params.url);
575 if (params.url.SchemeIs(kDataScheme) &&
576 params.base_url_for_data_url.SchemeIs(kFileScheme)) {
577 // If 'data:' is used, and we have a 'file:' base url, grant access to
578 // local files.
579 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
580 GetProcess()->GetID(), params.base_url_for_data_url);
581 }
582 }
583
584 // Only send the message if we aren't suspended at the start of a cross-site
585 // request.
586 if (navigations_suspended_) {
587 // Shouldn't be possible to have a second navigation while suspended, since
588 // navigations will only be suspended during a cross-site request. If a
589 // second navigation occurs, WebContentsImpl will cancel this pending RVH
590 // create a new pending RVH.
591 DCHECK(!suspended_nav_params_.get());
592 suspended_nav_params_.reset(new ViewMsg_Navigate_Params(params));
593 } else {
594 // Get back to a clean state, in case we start a new navigation without
595 // completing a RVH swap or unload handler.
596 SetState(STATE_DEFAULT);
597
598 Send(new ViewMsg_Navigate(GetRoutingID(), params));
599 }
600
601 // Force the throbber to start. We do this because WebKit's "started
602 // loading" message will be received asynchronously from the UI of the
603 // browser. But we want to keep the throbber in sync with what's happening
604 // in the UI. For example, we want to start throbbing immediately when the
605 // user naivgates even if the renderer is delayed. There is also an issue
606 // with the throbber starting because the WebUI (which controls whether the
607 // favicon is displayed) happens synchronously. If the start loading
608 // messages was asynchronous, then the default favicon would flash in.
609 //
610 // WebKit doesn't send throb notifications for JavaScript URLs, so we
611 // don't want to either.
612 if (!params.url.SchemeIs(kJavaScriptScheme)) {
613 RenderFrameHostImpl* rfh =
614 static_cast<RenderFrameHostImpl*>(GetMainFrame());
615 rfh->OnDidStartLoading();
616 }
571 } 617 }
572 618
573 void RenderViewHostImpl::NavigateToURL(const GURL& url) { 619 void RenderViewHostImpl::NavigateToURL(const GURL& url) {
574 delegate_->GetFrameTree()->GetMainFrame()->NavigateToURL(url); 620 ViewMsg_Navigate_Params params;
621 params.page_id = -1;
622 params.pending_history_list_offset = -1;
623 params.current_history_list_offset = -1;
624 params.current_history_list_length = 0;
625 params.url = url;
626 params.transition = PAGE_TRANSITION_LINK;
627 params.navigation_type = ViewMsg_Navigate_Type::NORMAL;
628 Navigate(params);
575 } 629 }
576 630
577 void RenderViewHostImpl::SetNavigationsSuspended( 631 void RenderViewHostImpl::SetNavigationsSuspended(
578 bool suspend, 632 bool suspend,
579 const base::TimeTicks& proceed_time) { 633 const base::TimeTicks& proceed_time) {
580 // This should only be called to toggle the state. 634 // This should only be called to toggle the state.
581 DCHECK(navigations_suspended_ != suspend); 635 DCHECK(navigations_suspended_ != suspend);
582 636
583 navigations_suspended_ = suspend; 637 navigations_suspended_ = suspend;
584 if (!suspend && suspended_nav_params_) { 638 if (!suspend && suspended_nav_params_) {
585 // There's navigation message params waiting to be sent. Now that we're not 639 // There's navigation message params waiting to be sent. Now that we're not
586 // suspended anymore, resume navigation by sending them. If we were swapped 640 // suspended anymore, resume navigation by sending them. If we were swapped
587 // out, we should also stop filtering out the IPC messages now. 641 // out, we should also stop filtering out the IPC messages now.
588 SetState(STATE_DEFAULT); 642 SetState(STATE_DEFAULT);
589 643
590 DCHECK(!proceed_time.is_null()); 644 DCHECK(!proceed_time.is_null());
591 suspended_nav_params_->browser_navigation_start = proceed_time; 645 suspended_nav_params_->browser_navigation_start = proceed_time;
592 Send(new FrameMsg_Navigate( 646 Send(new ViewMsg_Navigate(GetRoutingID(), *suspended_nav_params_.get()));
593 main_frame_routing_id_, *suspended_nav_params_.get()));
594 suspended_nav_params_.reset(); 647 suspended_nav_params_.reset();
595 } 648 }
596 } 649 }
597 650
598 void RenderViewHostImpl::CancelSuspendedNavigations() { 651 void RenderViewHostImpl::CancelSuspendedNavigations() {
599 // Clear any state if a pending navigation is canceled or pre-empted. 652 // Clear any state if a pending navigation is canceled or pre-empted.
600 if (suspended_nav_params_) 653 if (suspended_nav_params_)
601 suspended_nav_params_.reset(); 654 suspended_nav_params_.reset();
602 navigations_suspended_ = false; 655 navigations_suspended_ = false;
603 } 656 }
(...skipping 1433 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 return true; 2090 return true;
2038 } 2091 }
2039 2092
2040 void RenderViewHostImpl::AttachToFrameTree() { 2093 void RenderViewHostImpl::AttachToFrameTree() {
2041 FrameTree* frame_tree = delegate_->GetFrameTree(); 2094 FrameTree* frame_tree = delegate_->GetFrameTree();
2042 2095
2043 frame_tree->ResetForMainFrameSwap(); 2096 frame_tree->ResetForMainFrameSwap();
2044 } 2097 }
2045 2098
2046 } // namespace content 2099 } // namespace content
OLDNEW
« no previous file with comments | « trunk/src/content/browser/renderer_host/render_view_host_impl.h ('k') | trunk/src/content/common/frame_message_enums.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698