| OLD | NEW |
| 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/navigation_controller_impl.h" | 5 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 // initiated navigations. Most renderer-initiated navigations should not | 439 // initiated navigations. Most renderer-initiated navigations should not |
| 440 // show the pending entry, to prevent URL spoof attacks. | 440 // show the pending entry, to prevent URL spoof attacks. |
| 441 // | 441 // |
| 442 // We make an exception for renderer-initiated navigations in new tabs, as | 442 // We make an exception for renderer-initiated navigations in new tabs, as |
| 443 // long as no other page has tried to access the initial empty document in | 443 // long as no other page has tried to access the initial empty document in |
| 444 // the new tab. If another page modifies this blank page, a URL spoof is | 444 // the new tab. If another page modifies this blank page, a URL spoof is |
| 445 // possible, so we must stop showing the pending entry. | 445 // possible, so we must stop showing the pending entry. |
| 446 bool safe_to_show_pending = | 446 bool safe_to_show_pending = |
| 447 pending_entry_ && | 447 pending_entry_ && |
| 448 // Require a new navigation. | 448 // Require a new navigation. |
| 449 pending_entry_index_ == -1 && | 449 pending_entry_->GetPageID() == -1 && |
| 450 // Require either browser-initiated or an unmodified new tab. | 450 // Require either browser-initiated or an unmodified new tab. |
| 451 (!pending_entry_->is_renderer_initiated() || IsUnmodifiedBlankTab()); | 451 (!pending_entry_->is_renderer_initiated() || IsUnmodifiedBlankTab()); |
| 452 | 452 |
| 453 // Also allow showing the pending entry for history navigations in a new tab, | 453 // Also allow showing the pending entry for history navigations in a new tab, |
| 454 // such as Ctrl+Back. In this case, no existing page is visible and no one | 454 // such as Ctrl+Back. In this case, no existing page is visible and no one |
| 455 // can script the new tab before it commits. | 455 // can script the new tab before it commits. |
| 456 if (!safe_to_show_pending && | 456 if (!safe_to_show_pending && |
| 457 pending_entry_ && | 457 pending_entry_ && |
| 458 pending_entry_index_ != -1 && | 458 pending_entry_->GetPageID() != -1 && |
| 459 IsInitialNavigation() && | 459 IsInitialNavigation() && |
| 460 !pending_entry_->is_renderer_initiated()) | 460 !pending_entry_->is_renderer_initiated()) |
| 461 safe_to_show_pending = true; | 461 safe_to_show_pending = true; |
| 462 | 462 |
| 463 if (safe_to_show_pending) | 463 if (safe_to_show_pending) |
| 464 return pending_entry_; | 464 return pending_entry_; |
| 465 return GetLastCommittedEntry(); | 465 return GetLastCommittedEntry(); |
| 466 } | 466 } |
| 467 | 467 |
| 468 int NavigationControllerImpl::GetCurrentEntryIndex() const { | 468 int NavigationControllerImpl::GetCurrentEntryIndex() const { |
| (...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1777 } | 1777 } |
| 1778 } | 1778 } |
| 1779 } | 1779 } |
| 1780 | 1780 |
| 1781 void NavigationControllerImpl::SetGetTimestampCallbackForTest( | 1781 void NavigationControllerImpl::SetGetTimestampCallbackForTest( |
| 1782 const base::Callback<base::Time()>& get_timestamp_callback) { | 1782 const base::Callback<base::Time()>& get_timestamp_callback) { |
| 1783 get_timestamp_callback_ = get_timestamp_callback; | 1783 get_timestamp_callback_ = get_timestamp_callback; |
| 1784 } | 1784 } |
| 1785 | 1785 |
| 1786 } // namespace content | 1786 } // namespace content |
| OLD | NEW |