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

Side by Side Diff: content/browser/frame_host/navigator_impl.cc

Issue 464593003: Don't swap out the old RenderFrameHost until the new one commits. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Major rebase 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 | Annotate | Revision Log
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/browser/frame_host/navigator_impl.h" 5 #include "content/browser/frame_host/navigator_impl.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "content/browser/frame_host/frame_tree.h" 9 #include "content/browser/frame_host/frame_tree.h"
10 #include "content/browser/frame_host/frame_tree_node.h" 10 #include "content/browser/frame_host/frame_tree_node.h"
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 if (delegate_) 366 if (delegate_)
367 delegate_->AboutToNavigateRenderFrame(dest_render_frame_host); 367 delegate_->AboutToNavigateRenderFrame(dest_render_frame_host);
368 368
369 // WebContents uses this to fill LoadNotificationDetails when the load 369 // WebContents uses this to fill LoadNotificationDetails when the load
370 // completes, so that PerformanceMonitor that listens to the notification can 370 // completes, so that PerformanceMonitor that listens to the notification can
371 // record the load time. PerformanceMonitor is no longer maintained. 371 // record the load time. PerformanceMonitor is no longer maintained.
372 // TODO(ppi): make this go away. 372 // TODO(ppi): make this go away.
373 current_load_start_ = base::TimeTicks::Now(); 373 current_load_start_ = base::TimeTicks::Now();
374 374
375 // Navigate in the desired RenderFrameHost. 375 // Navigate in the desired RenderFrameHost.
376 // We can skip this step in the rare case that this is a transfer navigation
377 // which began in the chosen RenderFrameHost, since the request has already
378 // been issued. In that case, simply resume the response.
376 FrameMsg_Navigate_Params navigate_params; 379 FrameMsg_Navigate_Params navigate_params;
377 MakeNavigateParams(entry, *controller_, reload_type, navigation_start, 380 MakeNavigateParams(entry, *controller_, reload_type, navigation_start,
378 &navigate_params); 381 &navigate_params);
379 dest_render_frame_host->Navigate(navigate_params); 382 bool is_transfer_to_same =
383 navigate_params.transferred_request_child_id != -1 &&
384 navigate_params.transferred_request_child_id ==
385 dest_render_frame_host->GetProcess()->GetID();
386 if (!is_transfer_to_same) {
387 dest_render_frame_host->Navigate(navigate_params);
388 } else {
389 // No need to navigate again. Just resume the deferred request.
390 dest_render_frame_host->GetProcess()->ResumeDeferredNavigation(
391 GlobalRequestID(navigate_params.transferred_request_child_id,
392 navigate_params.transferred_request_request_id));
393 }
380 394
381 // Make sure no code called via RFH::Navigate clears the pending entry. 395 // Make sure no code called via RFH::Navigate clears the pending entry.
382 CHECK_EQ(controller_->GetPendingEntry(), &entry); 396 CHECK_EQ(controller_->GetPendingEntry(), &entry);
383 397
384 if (entry.GetPageID() == -1) { 398 if (entry.GetPageID() == -1) {
385 // HACK!! This code suppresses javascript: URLs from being added to 399 // HACK!! This code suppresses javascript: URLs from being added to
386 // session history, which is what we want to do for javascript: URLs that 400 // session history, which is what we want to do for javascript: URLs that
387 // do not generate content. What we really need is a message from the 401 // do not generate content. What we really need is a message from the
388 // renderer telling us that a new page was not created. The same message 402 // renderer telling us that a new page was not created. The same message
389 // could be used for mailto: URLs and the like. 403 // could be used for mailto: URLs and the like.
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 651
638 // Navigations in Web UI pages count as browser-initiated navigations. 652 // Navigations in Web UI pages count as browser-initiated navigations.
639 params.is_renderer_initiated = false; 653 params.is_renderer_initiated = false;
640 } 654 }
641 655
642 if (delegate_) 656 if (delegate_)
643 delegate_->RequestOpenURL(render_frame_host, params); 657 delegate_->RequestOpenURL(render_frame_host, params);
644 } 658 }
645 659
646 } // namespace content 660 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698