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

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

Issue 685133004: Handling |SessionCommand|s as scoped_ptr's (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed 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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } 296 }
297 } 297 }
298 298
299 // Creates tabs and windows from the commands specified in |data|. The created 299 // Creates tabs and windows from the commands specified in |data|. The created
300 // tabs and windows are added to |tabs| and |windows| respectively, with the 300 // tabs and windows are added to |tabs| and |windows| respectively, with the
301 // id of the active window set in |active_window_id|. It is up to the caller 301 // id of the active window set in |active_window_id|. It is up to the caller
302 // to delete the tabs and windows added to |tabs| and |windows|. 302 // to delete the tabs and windows added to |tabs| and |windows|.
303 // 303 //
304 // This does NOT add any created SessionTabs to SessionWindow.tabs, that is 304 // This does NOT add any created SessionTabs to SessionWindow.tabs, that is
305 // done by AddTabsToWindows. 305 // done by AddTabsToWindows.
306 bool CreateTabsAndWindows(const std::vector<SessionCommand*>& data, 306 bool CreateTabsAndWindows(const ScopedVector<SessionCommand>& data,
307 std::map<int, SessionTab*>* tabs, 307 std::map<int, SessionTab*>* tabs,
308 std::map<int, SessionWindow*>* windows, 308 std::map<int, SessionWindow*>* windows,
309 SessionID::id_type* active_window_id) { 309 SessionID::id_type* active_window_id) {
310 // If the file is corrupt (command with wrong size, or unknown command), we 310 // If the file is corrupt (command with wrong size, or unknown command), we
311 // still return true and attempt to restore what we we can. 311 // still return true and attempt to restore what we we can.
312 VLOG(1) << "CreateTabsAndWindows"; 312 VLOG(1) << "CreateTabsAndWindows";
313 313
314 for (std::vector<SessionCommand*>::const_iterator i = data.begin(); 314 for (std::vector<SessionCommand*>::const_iterator i = data.begin();
315 i != data.end(); ++i) { 315 i != data.end(); ++i) {
316 const SessionCommand::id_type kCommandSetWindowBounds2 = 10; 316 const SessionCommand::id_type kCommandSetWindowBounds2 = 10;
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 // the command set for specific implementations. 556 // the command set for specific implementations.
557 VLOG(1) << "Failed reading an unknown command " << command->id(); 557 VLOG(1) << "Failed reading an unknown command " << command->id();
558 return true; 558 return true;
559 } 559 }
560 } 560 }
561 return true; 561 return true;
562 } 562 }
563 563
564 } // namespace 564 } // namespace
565 565
566 SessionCommand* CreateSetSelectedTabInWindowCommand(const SessionID& window_id, 566 scoped_ptr<SessionCommand> CreateSetSelectedTabInWindowCommand(
567 int index) { 567 const SessionID& window_id,
568 int index) {
568 SelectedTabInIndexPayload payload = { 0 }; 569 SelectedTabInIndexPayload payload = { 0 };
569 payload.id = window_id.id(); 570 payload.id = window_id.id();
570 payload.index = index; 571 payload.index = index;
571 SessionCommand* command = new SessionCommand(kCommandSetSelectedTabInIndex, 572 scoped_ptr<SessionCommand> command(
572 sizeof(payload)); 573 new SessionCommand(kCommandSetSelectedTabInIndex, sizeof(payload)));
573 memcpy(command->contents(), &payload, sizeof(payload)); 574 memcpy(command->contents(), &payload, sizeof(payload));
574 return command; 575 return command;
575 } 576 }
576 577
577 SessionCommand* CreateSetTabWindowCommand(const SessionID& window_id, 578 scoped_ptr<SessionCommand> CreateSetTabWindowCommand(const SessionID& window_id,
578 const SessionID& tab_id) { 579 const SessionID& tab_id) {
579 SessionID::id_type payload[] = { window_id.id(), tab_id.id() }; 580 SessionID::id_type payload[] = { window_id.id(), tab_id.id() };
580 SessionCommand* command = 581 scoped_ptr<SessionCommand> command(
581 new SessionCommand(kCommandSetTabWindow, sizeof(payload)); 582 new SessionCommand(kCommandSetTabWindow, sizeof(payload)));
582 memcpy(command->contents(), payload, sizeof(payload)); 583 memcpy(command->contents(), payload, sizeof(payload));
583 return command; 584 return command;
584 } 585 }
585 586
586 SessionCommand* CreateSetWindowBoundsCommand(const SessionID& window_id, 587 scoped_ptr<SessionCommand> CreateSetWindowBoundsCommand(
587 const gfx::Rect& bounds, 588 const SessionID& window_id,
588 ui::WindowShowState show_state) { 589 const gfx::Rect& bounds,
590 ui::WindowShowState show_state) {
589 WindowBoundsPayload3 payload = { 0 }; 591 WindowBoundsPayload3 payload = { 0 };
590 payload.window_id = window_id.id(); 592 payload.window_id = window_id.id();
591 payload.x = bounds.x(); 593 payload.x = bounds.x();
592 payload.y = bounds.y(); 594 payload.y = bounds.y();
593 payload.w = bounds.width(); 595 payload.w = bounds.width();
594 payload.h = bounds.height(); 596 payload.h = bounds.height();
595 payload.show_state = ShowStateToPersistedShowState(show_state); 597 payload.show_state = ShowStateToPersistedShowState(show_state);
596 SessionCommand* command = new SessionCommand(kCommandSetWindowBounds3, 598 scoped_ptr<SessionCommand> command(
597 sizeof(payload)); 599 new SessionCommand(kCommandSetWindowBounds3, sizeof(payload)));
598 memcpy(command->contents(), &payload, sizeof(payload)); 600 memcpy(command->contents(), &payload, sizeof(payload));
599 return command; 601 return command;
600 } 602 }
601 603
602 SessionCommand* CreateSetTabIndexInWindowCommand(const SessionID& tab_id, 604 scoped_ptr<SessionCommand> CreateSetTabIndexInWindowCommand(
603 int new_index) { 605 const SessionID& tab_id,
606 int new_index) {
604 TabIndexInWindowPayload payload = { 0 }; 607 TabIndexInWindowPayload payload = { 0 };
605 payload.id = tab_id.id(); 608 payload.id = tab_id.id();
606 payload.index = new_index; 609 payload.index = new_index;
607 SessionCommand* command = 610 scoped_ptr<SessionCommand> command(
608 new SessionCommand(kCommandSetTabIndexInWindow, sizeof(payload)); 611 new SessionCommand(kCommandSetTabIndexInWindow, sizeof(payload)));
609 memcpy(command->contents(), &payload, sizeof(payload)); 612 memcpy(command->contents(), &payload, sizeof(payload));
610 return command; 613 return command;
611 } 614 }
612 615
613 SessionCommand* CreateTabClosedCommand(const SessionID::id_type tab_id) { 616 scoped_ptr<SessionCommand> CreateTabClosedCommand(
617 const SessionID::id_type tab_id) {
614 ClosedPayload payload; 618 ClosedPayload payload;
615 // Because of what appears to be a compiler bug setting payload to {0} doesn't 619 // Because of what appears to be a compiler bug setting payload to {0} doesn't
616 // set the padding to 0, resulting in Purify reporting an UMR when we write 620 // set the padding to 0, resulting in Purify reporting an UMR when we write
617 // the structure to disk. To avoid this we explicitly memset the struct. 621 // the structure to disk. To avoid this we explicitly memset the struct.
618 memset(&payload, 0, sizeof(payload)); 622 memset(&payload, 0, sizeof(payload));
619 payload.id = tab_id; 623 payload.id = tab_id;
620 payload.close_time = base::Time::Now().ToInternalValue(); 624 payload.close_time = base::Time::Now().ToInternalValue();
621 SessionCommand* command = 625 scoped_ptr<SessionCommand> command(
622 new SessionCommand(kCommandTabClosed, sizeof(payload)); 626 new SessionCommand(kCommandTabClosed, sizeof(payload)));
623 memcpy(command->contents(), &payload, sizeof(payload)); 627 memcpy(command->contents(), &payload, sizeof(payload));
624 return command; 628 return command;
625 } 629 }
626 630
627 SessionCommand* CreateWindowClosedCommand(const SessionID::id_type window_id) { 631 scoped_ptr<SessionCommand> CreateWindowClosedCommand(
632 const SessionID::id_type window_id) {
628 ClosedPayload payload; 633 ClosedPayload payload;
629 // See comment in CreateTabClosedCommand as to why we do this. 634 // See comment in CreateTabClosedCommand as to why we do this.
630 memset(&payload, 0, sizeof(payload)); 635 memset(&payload, 0, sizeof(payload));
631 payload.id = window_id; 636 payload.id = window_id;
632 payload.close_time = base::Time::Now().ToInternalValue(); 637 payload.close_time = base::Time::Now().ToInternalValue();
633 SessionCommand* command = 638 scoped_ptr<SessionCommand> command(
634 new SessionCommand(kCommandWindowClosed, sizeof(payload)); 639 new SessionCommand(kCommandWindowClosed, sizeof(payload)));
635 memcpy(command->contents(), &payload, sizeof(payload)); 640 memcpy(command->contents(), &payload, sizeof(payload));
636 return command; 641 return command;
637 } 642 }
638 643
639 SessionCommand* CreateSetSelectedNavigationIndexCommand(const SessionID& tab_id, 644 scoped_ptr<SessionCommand> CreateSetSelectedNavigationIndexCommand(
640 int index) { 645 const SessionID& tab_id,
646 int index) {
641 SelectedNavigationIndexPayload payload = { 0 }; 647 SelectedNavigationIndexPayload payload = { 0 };
642 payload.id = tab_id.id(); 648 payload.id = tab_id.id();
643 payload.index = index; 649 payload.index = index;
644 SessionCommand* command = new SessionCommand( 650 scoped_ptr<SessionCommand> command(
645 kCommandSetSelectedNavigationIndex, sizeof(payload)); 651 new SessionCommand(kCommandSetSelectedNavigationIndex, sizeof(payload)));
646 memcpy(command->contents(), &payload, sizeof(payload)); 652 memcpy(command->contents(), &payload, sizeof(payload));
647 return command; 653 return command;
648 } 654 }
649 655
650 SessionCommand* CreateSetWindowTypeCommand(const SessionID& window_id, 656 scoped_ptr<SessionCommand> CreateSetWindowTypeCommand(
651 SessionWindow::WindowType type) { 657 const SessionID& window_id,
658 SessionWindow::WindowType type) {
652 WindowTypePayload payload = { 0 }; 659 WindowTypePayload payload = { 0 };
653 payload.id = window_id.id(); 660 payload.id = window_id.id();
654 payload.index = static_cast<int32>(type); 661 payload.index = static_cast<int32>(type);
655 SessionCommand* command = new SessionCommand( 662 scoped_ptr<SessionCommand> command(
656 kCommandSetWindowType, sizeof(payload)); 663 new SessionCommand( kCommandSetWindowType, sizeof(payload)));
657 memcpy(command->contents(), &payload, sizeof(payload)); 664 memcpy(command->contents(), &payload, sizeof(payload));
658 return command; 665 return command;
659 } 666 }
660 667
661 SessionCommand* CreatePinnedStateCommand(const SessionID& tab_id, 668 scoped_ptr<SessionCommand> CreatePinnedStateCommand(
662 bool is_pinned) { 669 const SessionID& tab_id,
670 bool is_pinned) {
663 PinnedStatePayload payload = { 0 }; 671 PinnedStatePayload payload = { 0 };
664 payload.tab_id = tab_id.id(); 672 payload.tab_id = tab_id.id();
665 payload.pinned_state = is_pinned; 673 payload.pinned_state = is_pinned;
666 SessionCommand* command = 674 scoped_ptr<SessionCommand> command(
667 new SessionCommand(kCommandSetPinnedState, sizeof(payload)); 675 new SessionCommand(kCommandSetPinnedState, sizeof(payload)));
668 memcpy(command->contents(), &payload, sizeof(payload)); 676 memcpy(command->contents(), &payload, sizeof(payload));
669 return command; 677 return command;
670 } 678 }
671 679
672 SessionCommand* CreateSessionStorageAssociatedCommand( 680 scoped_ptr<SessionCommand> CreateSessionStorageAssociatedCommand(
673 const SessionID& tab_id, 681 const SessionID& tab_id,
674 const std::string& session_storage_persistent_id) { 682 const std::string& session_storage_persistent_id) {
675 Pickle pickle; 683 Pickle pickle;
676 pickle.WriteInt(tab_id.id()); 684 pickle.WriteInt(tab_id.id());
677 pickle.WriteString(session_storage_persistent_id); 685 pickle.WriteString(session_storage_persistent_id);
678 return new SessionCommand(kCommandSessionStorageAssociated, pickle); 686 return scoped_ptr<SessionCommand>(
687 new SessionCommand(kCommandSessionStorageAssociated, pickle));
679 } 688 }
680 689
681 SessionCommand* CreateSetActiveWindowCommand(const SessionID& window_id) { 690 scoped_ptr<SessionCommand> CreateSetActiveWindowCommand(
691 const SessionID& window_id) {
682 ActiveWindowPayload payload = 0; 692 ActiveWindowPayload payload = 0;
683 payload = window_id.id(); 693 payload = window_id.id();
684 SessionCommand* command = 694 scoped_ptr<SessionCommand> command(
685 new SessionCommand(kCommandSetActiveWindow, sizeof(payload)); 695 new SessionCommand(kCommandSetActiveWindow, sizeof(payload)));
686 memcpy(command->contents(), &payload, sizeof(payload)); 696 memcpy(command->contents(), &payload, sizeof(payload));
687 return command; 697 return command;
688 } 698 }
689 699
690 SessionCommand* CreateTabNavigationPathPrunedFromBackCommand( 700 scoped_ptr<SessionCommand> CreateTabNavigationPathPrunedFromBackCommand(
691 const SessionID& tab_id, 701 const SessionID& tab_id,
692 int count) { 702 int count) {
693 TabNavigationPathPrunedFromBackPayload payload = { 0 }; 703 TabNavigationPathPrunedFromBackPayload payload = { 0 };
694 payload.id = tab_id.id(); 704 payload.id = tab_id.id();
695 payload.index = count; 705 payload.index = count;
696 SessionCommand* command = 706 scoped_ptr<SessionCommand> command(
697 new SessionCommand(kCommandTabNavigationPathPrunedFromBack, 707 new SessionCommand(kCommandTabNavigationPathPrunedFromBack,
698 sizeof(payload)); 708 sizeof(payload)));
699 memcpy(command->contents(), &payload, sizeof(payload)); 709 memcpy(command->contents(), &payload, sizeof(payload));
700 return command; 710 return command;
701 } 711 }
702 712
703 SessionCommand* CreateTabNavigationPathPrunedFromFrontCommand( 713 scoped_ptr<SessionCommand> CreateTabNavigationPathPrunedFromFrontCommand(
704 const SessionID& tab_id, 714 const SessionID& tab_id,
705 int count) { 715 int count) {
706 TabNavigationPathPrunedFromFrontPayload payload = { 0 }; 716 TabNavigationPathPrunedFromFrontPayload payload = { 0 };
707 payload.id = tab_id.id(); 717 payload.id = tab_id.id();
708 payload.index = count; 718 payload.index = count;
709 SessionCommand* command = 719 scoped_ptr<SessionCommand> command(
710 new SessionCommand(kCommandTabNavigationPathPrunedFromFront, 720 new SessionCommand(kCommandTabNavigationPathPrunedFromFront,
711 sizeof(payload)); 721 sizeof(payload)));
712 memcpy(command->contents(), &payload, sizeof(payload)); 722 memcpy(command->contents(), &payload, sizeof(payload));
713 return command; 723 return command;
714 } 724 }
715 725
716 SessionCommand* CreateUpdateTabNavigationCommand( 726 scoped_ptr<SessionCommand> CreateUpdateTabNavigationCommand(
717 const SessionID& tab_id, 727 const SessionID& tab_id,
718 const sessions::SerializedNavigationEntry& navigation) { 728 const sessions::SerializedNavigationEntry& navigation) {
719 return ::CreateUpdateTabNavigationCommand(kCommandUpdateTabNavigation, 729 return CreateUpdateTabNavigationCommand(kCommandUpdateTabNavigation,
720 tab_id.id(), 730 tab_id.id(),
721 navigation); 731 navigation);
722 } 732 }
723 733
724 SessionCommand* CreateSetTabExtensionAppIDCommand( 734 scoped_ptr<SessionCommand> CreateSetTabExtensionAppIDCommand(
725 const SessionID& tab_id, 735 const SessionID& tab_id,
726 const std::string& extension_id) { 736 const std::string& extension_id) {
727 return ::CreateSetTabExtensionAppIDCommand(kCommandSetExtensionAppID, 737 return CreateSetTabExtensionAppIDCommand(kCommandSetExtensionAppID,
728 tab_id.id(), 738 tab_id.id(),
729 extension_id); 739 extension_id);
730 } 740 }
731 741
732 SessionCommand* CreateSetTabUserAgentOverrideCommand( 742 scoped_ptr<SessionCommand> CreateSetTabUserAgentOverrideCommand(
733 const SessionID& tab_id, 743 const SessionID& tab_id,
734 const std::string& user_agent_override) { 744 const std::string& user_agent_override) {
735 return ::CreateSetTabUserAgentOverrideCommand(kCommandSetTabUserAgentOverride, 745 return CreateSetTabUserAgentOverrideCommand(kCommandSetTabUserAgentOverride,
736 tab_id.id(), 746 tab_id.id(),
737 user_agent_override); 747 user_agent_override);
738 } 748 }
739 749
740 SessionCommand* CreateSetWindowAppNameCommand( 750 scoped_ptr<SessionCommand> CreateSetWindowAppNameCommand(
741 const SessionID& window_id, 751 const SessionID& window_id,
742 const std::string& app_name) { 752 const std::string& app_name) {
743 return ::CreateSetWindowAppNameCommand(kCommandSetWindowAppName, 753 return CreateSetWindowAppNameCommand(kCommandSetWindowAppName,
744 window_id.id(), 754 window_id.id(),
745 app_name); 755 app_name);
746 } 756 }
747 757
748 bool ReplacePendingCommand(SessionCommand* command, 758 bool ReplacePendingCommand(ScopedVector<SessionCommand>& pending_commands,
749 std::vector<SessionCommand*>& pending_commands) { 759 scoped_ptr<SessionCommand>* command) {
750 // We optimize page navigations, which can happen quite frequently and 760 // We optimize page navigations, which can happen quite frequently and
751 // 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!
752 if (command->id() != kCommandUpdateTabNavigation && 762 if ((*command)->id() != kCommandUpdateTabNavigation &&
753 command->id() != kCommandSetActiveWindow) { 763 (*command)->id() != kCommandSetActiveWindow) {
754 return false; 764 return false;
755 } 765 }
756 for (std::vector<SessionCommand*>::reverse_iterator i = 766 for (ScopedVector<SessionCommand>::reverse_iterator i =
757 pending_commands.rbegin(); i != pending_commands.rend(); ++i) { 767 pending_commands.rbegin(); i != pending_commands.rend(); ++i) {
758 SessionCommand* existing_command = *i; 768 SessionCommand* existing_command = *i;
759 if (command->id() == kCommandUpdateTabNavigation && 769 if ((*command)->id() == kCommandUpdateTabNavigation &&
760 existing_command->id() == kCommandUpdateTabNavigation) { 770 existing_command->id() == kCommandUpdateTabNavigation) {
761 scoped_ptr<Pickle> command_pickle(command->PayloadAsPickle()); 771 scoped_ptr<Pickle> command_pickle((*command)->PayloadAsPickle());
762 PickleIterator iterator(*command_pickle); 772 PickleIterator iterator(*command_pickle);
763 SessionID::id_type command_tab_id; 773 SessionID::id_type command_tab_id;
764 int command_nav_index; 774 int command_nav_index;
765 if (!command_pickle->ReadInt(&iterator, &command_tab_id) || 775 if (!command_pickle->ReadInt(&iterator, &command_tab_id) ||
766 !command_pickle->ReadInt(&iterator, &command_nav_index)) { 776 !command_pickle->ReadInt(&iterator, &command_nav_index)) {
767 return false; 777 return false;
768 } 778 }
769 SessionID::id_type existing_tab_id; 779 SessionID::id_type existing_tab_id;
770 int existing_nav_index; 780 int existing_nav_index;
771 { 781 {
772 // Creating a pickle like this means the Pickle references the data from 782 // Creating a pickle like this means the Pickle references the data from
773 // the command. Make sure we delete the pickle before the command, else 783 // the command. Make sure we delete the pickle before the command, else
774 // the pickle references deleted memory. 784 // the pickle references deleted memory.
775 scoped_ptr<Pickle> existing_pickle(existing_command->PayloadAsPickle()); 785 scoped_ptr<Pickle> existing_pickle(existing_command->PayloadAsPickle());
776 iterator = PickleIterator(*existing_pickle); 786 iterator = PickleIterator(*existing_pickle);
777 if (!existing_pickle->ReadInt(&iterator, &existing_tab_id) || 787 if (!existing_pickle->ReadInt(&iterator, &existing_tab_id) ||
778 !existing_pickle->ReadInt(&iterator, &existing_nav_index)) { 788 !existing_pickle->ReadInt(&iterator, &existing_nav_index)) {
779 return false; 789 return false;
780 } 790 }
781 } 791 }
782 if (existing_tab_id == command_tab_id && 792 if (existing_tab_id == command_tab_id &&
783 existing_nav_index == command_nav_index) { 793 existing_nav_index == command_nav_index) {
784 // existing_command is an update for the same tab/index pair. Replace 794 // existing_command is an update for the same tab/index pair. Replace
785 // it with the new one. We need to add to the end of the list just in 795 // it with the new one. We need to add to the end of the list just in
786 // case there is a prune command after the update command. 796 // case there is a prune command after the update command.
787 delete existing_command; 797 // Note: ScopedVector::erase will also delete the element.
788 pending_commands.erase(i.base() - 1); 798 pending_commands.erase(i.base() - 1);
789 pending_commands.push_back(command); 799 pending_commands.push_back((*command).release());
790 return true; 800 return true;
791 } 801 }
792 return false; 802 return false;
793 } 803 }
794 if (command->id() == kCommandSetActiveWindow && 804 if ((*command)->id() == kCommandSetActiveWindow &&
795 existing_command->id() == kCommandSetActiveWindow) { 805 existing_command->id() == kCommandSetActiveWindow) {
796 *i = command; 806 *i = (*command).release();
797 delete existing_command; 807 delete existing_command;
798 return true; 808 return true;
799 } 809 }
800 } 810 }
801 return false; 811 return false;
802 } 812 }
803 813
804 bool IsClosingCommand(SessionCommand* command) { 814 bool IsClosingCommand(SessionCommand* command) {
805 return command->id() == kCommandTabClosed || 815 return command->id() == kCommandTabClosed ||
806 command->id() == kCommandWindowClosed; 816 command->id() == kCommandWindowClosed;
807 } 817 }
808 818
809 void RestoreSessionFromCommands(const std::vector<SessionCommand*>& commands, 819 void RestoreSessionFromCommands(const ScopedVector<SessionCommand>& commands,
810 std::vector<SessionWindow*>* valid_windows, 820 std::vector<SessionWindow*>* valid_windows,
811 SessionID::id_type* active_window_id) { 821 SessionID::id_type* active_window_id) {
812 std::map<int, SessionTab*> tabs; 822 std::map<int, SessionTab*> tabs;
813 std::map<int, SessionWindow*> windows; 823 std::map<int, SessionWindow*> windows;
814 824
815 VLOG(1) << "RestoreSessionFromCommands " << commands.size(); 825 VLOG(1) << "RestoreSessionFromCommands " << commands.size();
816 if (CreateTabsAndWindows(commands, &tabs, &windows, active_window_id)) { 826 if (CreateTabsAndWindows(commands, &tabs, &windows, active_window_id)) {
817 AddTabsToWindows(&tabs, &windows); 827 AddTabsToWindows(&tabs, &windows);
818 SortTabsBasedOnVisualOrderAndPrune(&windows, valid_windows); 828 SortTabsBasedOnVisualOrderAndPrune(&windows, valid_windows);
819 UpdateSelectedTabIndex(valid_windows); 829 UpdateSelectedTabIndex(valid_windows);
820 } 830 }
821 STLDeleteValues(&tabs); 831 STLDeleteValues(&tabs);
822 // Don't delete contents of windows, that is done by the caller as all 832 // Don't delete contents of windows, that is done by the caller as all
823 // valid windows are added to valid_windows. 833 // valid windows are added to valid_windows.
824 } 834 }
OLDNEW
« no previous file with comments | « chrome/browser/sessions/session_service_commands.h ('k') | chrome/browser/sessions/session_service_test_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698