Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "chrome/browser/sessions/session_restore.h" | 5 #include "chrome/browser/sessions/session_restore.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <list> | 10 #include <list> |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 base::TimeDelta delta = highest_time - tab.last_active_time; | 568 base::TimeDelta delta = highest_time - tab.last_active_time; |
| 569 contents->SetLastActiveTime(now - delta); | 569 contents->SetLastActiveTime(now - delta); |
| 570 RestoredTab restored_tab(contents, false, | 570 RestoredTab restored_tab(contents, false, |
| 571 tab.extension_app_id.empty(), tab.pinned); | 571 tab.extension_app_id.empty(), tab.pinned); |
| 572 created_contents->push_back(restored_tab); | 572 created_contents->push_back(restored_tab); |
| 573 } | 573 } |
| 574 } | 574 } |
| 575 } | 575 } |
| 576 } | 576 } |
| 577 | 577 |
| 578 int GetSelectedIndex(const sessions::SessionTab& tab) { | |
|
sky
2016/11/09 22:24:04
I have a mild preference for moving this to Sessio
sky
2016/11/09 22:24:04
This only effects session restore, what about tab
zmin
2016/11/10 22:36:07
I want to scope the affect of this change as littl
zmin
2016/11/10 22:36:07
OnGotSessionCommands is a simple function. Moving
| |
| 579 int selected_index = tab.current_navigation_index; | |
| 580 selected_index = std::max( | |
| 581 0, | |
| 582 std::min(selected_index, static_cast<int>(tab.navigations.size() - 1))); | |
| 583 | |
| 584 // After user sign out, Chrome may navigate to the setting page from the | |
| 585 // sign out page asynchronously. The browser may be closed before the | |
| 586 // navigation callback finished. | |
| 587 std::string setting_page_url = std::string(chrome::kChromeUISettingsURL); | |
| 588 std::string sign_out_page_url = | |
| 589 setting_page_url + std::string(chrome::kSignOutSubPage); | |
|
sky
2016/11/09 22:24:04
Is there a reason you care about this case, and sa
zmin
2016/11/10 22:36:07
There're some edge cases I'm thinking about. For e
| |
| 590 if (selected_index > 0 && | |
| 591 tab.navigations.at(selected_index).virtual_url().spec() == | |
|
sky
2016/11/09 22:24:04
at() -> [] (same comment below).
zmin
2016/11/10 22:36:07
Done.
| |
| 592 sign_out_page_url && | |
| 593 tab.navigations.at(selected_index - 1).virtual_url().spec() == | |
| 594 setting_page_url) { | |
| 595 selected_index -= 1; | |
| 596 } | |
| 597 | |
| 598 return selected_index; | |
| 599 } | |
| 600 | |
| 578 // |tab_index| is ignored for pinned tabs which will always be pushed behind | 601 // |tab_index| is ignored for pinned tabs which will always be pushed behind |
| 579 // the last existing pinned tab. | 602 // the last existing pinned tab. |
| 580 // |tab_loader_| will schedule this tab for loading if |is_selected_tab| is | 603 // |tab_loader_| will schedule this tab for loading if |is_selected_tab| is |
| 581 // false. | 604 // false. |
| 582 WebContents* RestoreTab(const sessions::SessionTab& tab, | 605 WebContents* RestoreTab(const sessions::SessionTab& tab, |
| 583 const int tab_index, | 606 const int tab_index, |
| 584 Browser* browser, | 607 Browser* browser, |
| 585 bool is_selected_tab) { | 608 bool is_selected_tab) { |
| 586 // It's possible (particularly for foreign sessions) to receive a tab | 609 // It's possible (particularly for foreign sessions) to receive a tab |
| 587 // without valid navigations. In that case, just skip it. | 610 // without valid navigations. In that case, just skip it. |
| 588 // See crbug.com/154129. | 611 // See crbug.com/154129. |
| 589 if (tab.navigations.empty()) | 612 if (tab.navigations.empty()) |
| 590 return nullptr; | 613 return nullptr; |
| 591 int selected_index = tab.current_navigation_index; | 614 int selected_index = GetSelectedIndex(tab); |
| 592 selected_index = std::max( | |
| 593 0, | |
| 594 std::min(selected_index, static_cast<int>(tab.navigations.size() - 1))); | |
| 595 | 615 |
| 596 RecordAppLaunchForTab(browser, tab, selected_index); | 616 RecordAppLaunchForTab(browser, tab, selected_index); |
| 597 | 617 |
| 598 // Associate sessionStorage (if any) to the restored tab. | 618 // Associate sessionStorage (if any) to the restored tab. |
| 599 scoped_refptr<content::SessionStorageNamespace> session_storage_namespace; | 619 scoped_refptr<content::SessionStorageNamespace> session_storage_namespace; |
| 600 if (!tab.session_storage_persistent_id.empty()) { | 620 if (!tab.session_storage_persistent_id.empty()) { |
| 601 session_storage_namespace = | 621 session_storage_namespace = |
| 602 content::BrowserContext::GetDefaultStoragePartition(profile_) | 622 content::BrowserContext::GetDefaultStoragePartition(profile_) |
| 603 ->GetDOMStorageContext() | 623 ->GetDOMStorageContext() |
| 604 ->RecreateSessionStorage(tab.session_storage_persistent_id); | 624 ->RecreateSessionStorage(tab.session_storage_persistent_id); |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 836 // static | 856 // static |
| 837 SessionRestore::CallbackSubscription | 857 SessionRestore::CallbackSubscription |
| 838 SessionRestore::RegisterOnSessionRestoredCallback( | 858 SessionRestore::RegisterOnSessionRestoredCallback( |
| 839 const base::Callback<void(int)>& callback) { | 859 const base::Callback<void(int)>& callback) { |
| 840 return on_session_restored_callbacks()->Add(callback); | 860 return on_session_restored_callbacks()->Add(callback); |
| 841 } | 861 } |
| 842 | 862 |
| 843 // static | 863 // static |
| 844 base::CallbackList<void(int)>* | 864 base::CallbackList<void(int)>* |
| 845 SessionRestore::on_session_restored_callbacks_ = nullptr; | 865 SessionRestore::on_session_restored_callbacks_ = nullptr; |
| OLD | NEW |