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

Side by Side Diff: chrome/browser/sessions/session_service_commands.cc

Issue 694813003: Changing SessionService to have a BaseSessionService, not being one. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed browser tests Created 6 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_service_commands.h" 5 #include "chrome/browser/sessions/session_service_commands.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/pickle.h" 9 #include "base/pickle.h"
10 #include "chrome/browser/sessions/base_session_service_commands.h" 10 #include "chrome/browser/sessions/base_session_service_commands.h"
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 } 748 }
749 749
750 scoped_ptr<SessionCommand> CreateSetWindowAppNameCommand( 750 scoped_ptr<SessionCommand> CreateSetWindowAppNameCommand(
751 const SessionID& window_id, 751 const SessionID& window_id,
752 const std::string& app_name) { 752 const std::string& app_name) {
753 return CreateSetWindowAppNameCommand(kCommandSetWindowAppName, 753 return CreateSetWindowAppNameCommand(kCommandSetWindowAppName,
754 window_id.id(), 754 window_id.id(),
755 app_name); 755 app_name);
756 } 756 }
757 757
758 bool ReplacePendingCommand(ScopedVector<SessionCommand>& pending_commands, 758 bool ReplacePendingCommand(BaseSessionService* base_session_service,
759 scoped_ptr<SessionCommand>* command) { 759 scoped_ptr<SessionCommand>* command) {
760 // We optimize page navigations, which can happen quite frequently and 760 // We optimize page navigations, which can happen quite frequently and
761 // is expensive. And activation is like Highlander, there can only be one! 761 // is expensive. And activation is like Highlander, there can only be one!
762 if ((*command)->id() != kCommandUpdateTabNavigation && 762 if ((*command)->id() != kCommandUpdateTabNavigation &&
763 (*command)->id() != kCommandSetActiveWindow) { 763 (*command)->id() != kCommandSetActiveWindow) {
764 return false; 764 return false;
765 } 765 }
766 for (ScopedVector<SessionCommand>::reverse_iterator i = 766 for (ScopedVector<SessionCommand>::const_reverse_iterator i =
767 pending_commands.rbegin(); i != pending_commands.rend(); ++i) { 767 base_session_service->pending_commands().rbegin();
768 i != base_session_service->pending_commands().rend(); ++i) {
768 SessionCommand* existing_command = *i; 769 SessionCommand* existing_command = *i;
769 if ((*command)->id() == kCommandUpdateTabNavigation && 770 if ((*command)->id() == kCommandUpdateTabNavigation &&
770 existing_command->id() == kCommandUpdateTabNavigation) { 771 existing_command->id() == kCommandUpdateTabNavigation) {
771 scoped_ptr<Pickle> command_pickle((*command)->PayloadAsPickle()); 772 scoped_ptr<Pickle> command_pickle((*command)->PayloadAsPickle());
772 PickleIterator iterator(*command_pickle); 773 PickleIterator iterator(*command_pickle);
773 SessionID::id_type command_tab_id; 774 SessionID::id_type command_tab_id;
774 int command_nav_index; 775 int command_nav_index;
775 if (!command_pickle->ReadInt(&iterator, &command_tab_id) || 776 if (!command_pickle->ReadInt(&iterator, &command_tab_id) ||
776 !command_pickle->ReadInt(&iterator, &command_nav_index)) { 777 !command_pickle->ReadInt(&iterator, &command_nav_index)) {
777 return false; 778 return false;
778 } 779 }
779 SessionID::id_type existing_tab_id; 780 SessionID::id_type existing_tab_id;
780 int existing_nav_index; 781 int existing_nav_index;
781 { 782 {
782 // Creating a pickle like this means the Pickle references the data from 783 // Creating a pickle like this means the Pickle references the data from
783 // the command. Make sure we delete the pickle before the command, else 784 // the command. Make sure we delete the pickle before the command, else
784 // the pickle references deleted memory. 785 // the pickle references deleted memory.
785 scoped_ptr<Pickle> existing_pickle(existing_command->PayloadAsPickle()); 786 scoped_ptr<Pickle> existing_pickle(existing_command->PayloadAsPickle());
786 iterator = PickleIterator(*existing_pickle); 787 iterator = PickleIterator(*existing_pickle);
787 if (!existing_pickle->ReadInt(&iterator, &existing_tab_id) || 788 if (!existing_pickle->ReadInt(&iterator, &existing_tab_id) ||
788 !existing_pickle->ReadInt(&iterator, &existing_nav_index)) { 789 !existing_pickle->ReadInt(&iterator, &existing_nav_index)) {
789 return false; 790 return false;
790 } 791 }
791 } 792 }
792 if (existing_tab_id == command_tab_id && 793 if (existing_tab_id == command_tab_id &&
793 existing_nav_index == command_nav_index) { 794 existing_nav_index == command_nav_index) {
794 // existing_command is an update for the same tab/index pair. Replace 795 // existing_command is an update for the same tab/index pair. Replace
795 // it with the new one. We need to add to the end of the list just in 796 // it with the new one. We need to add to the end of the list just in
796 // case there is a prune command after the update command. 797 // case there is a prune command after the update command.
797 // Note: ScopedVector::erase will also delete the element. 798 base_session_service->EraseCommand(*(i.base() - 1));
798 pending_commands.erase(i.base() - 1); 799 base_session_service->AppendRebuildCommand((*command).Pass());
799 pending_commands.push_back((*command).release());
800 return true; 800 return true;
801 } 801 }
802 return false; 802 return false;
803 } 803 }
804 if ((*command)->id() == kCommandSetActiveWindow && 804 if ((*command)->id() == kCommandSetActiveWindow &&
805 existing_command->id() == kCommandSetActiveWindow) { 805 existing_command->id() == kCommandSetActiveWindow) {
806 *i = (*command).release(); 806 base_session_service->SwapCommand(existing_command, (*command).Pass());
807 delete existing_command;
808 return true; 807 return true;
809 } 808 }
810 } 809 }
811 return false; 810 return false;
812 } 811 }
813 812
814 bool IsClosingCommand(SessionCommand* command) { 813 bool IsClosingCommand(SessionCommand* command) {
815 return command->id() == kCommandTabClosed || 814 return command->id() == kCommandTabClosed ||
816 command->id() == kCommandWindowClosed; 815 command->id() == kCommandWindowClosed;
817 } 816 }
818 817
819 void RestoreSessionFromCommands(const ScopedVector<SessionCommand>& commands, 818 void RestoreSessionFromCommands(const ScopedVector<SessionCommand>& commands,
820 std::vector<SessionWindow*>* valid_windows, 819 std::vector<SessionWindow*>* valid_windows,
821 SessionID::id_type* active_window_id) { 820 SessionID::id_type* active_window_id) {
822 std::map<int, SessionTab*> tabs; 821 std::map<int, SessionTab*> tabs;
823 std::map<int, SessionWindow*> windows; 822 std::map<int, SessionWindow*> windows;
824 823
825 VLOG(1) << "RestoreSessionFromCommands " << commands.size(); 824 VLOG(1) << "RestoreSessionFromCommands " << commands.size();
826 if (CreateTabsAndWindows(commands, &tabs, &windows, active_window_id)) { 825 if (CreateTabsAndWindows(commands, &tabs, &windows, active_window_id)) {
827 AddTabsToWindows(&tabs, &windows); 826 AddTabsToWindows(&tabs, &windows);
828 SortTabsBasedOnVisualOrderAndPrune(&windows, valid_windows); 827 SortTabsBasedOnVisualOrderAndPrune(&windows, valid_windows);
829 UpdateSelectedTabIndex(valid_windows); 828 UpdateSelectedTabIndex(valid_windows);
830 } 829 }
831 STLDeleteValues(&tabs); 830 STLDeleteValues(&tabs);
832 // Don't delete contents of windows, that is done by the caller as all 831 // Don't delete contents of windows, that is done by the caller as all
833 // valid windows are added to valid_windows. 832 // valid windows are added to valid_windows.
834 } 833 }
OLDNEW
« no previous file with comments | « chrome/browser/sessions/session_service_commands.h ('k') | chrome/browser/sessions/session_service_test_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698