OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/memory/scoped_vector.h" | 10 #include "base/memory/scoped_vector.h" |
11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
14 #include "base/time.h" | 14 #include "base/time.h" |
15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
16 #include "chrome/browser/defaults.h" | 16 #include "chrome/browser/defaults.h" |
17 #include "chrome/browser/sessions/session_backend.h" | 17 #include "chrome/browser/sessions/session_backend.h" |
18 #include "chrome/browser/sessions/session_service.h" | 18 #include "chrome/browser/sessions/session_service.h" |
19 #include "chrome/browser/sessions/session_service_test_helper.h" | 19 #include "chrome/browser/sessions/session_service_test_helper.h" |
20 #include "chrome/browser/sessions/session_types.h" | 20 #include "chrome/browser/sessions/session_types.h" |
21 #include "chrome/common/chrome_notification_types.h" | 21 #include "chrome/common/chrome_notification_types.h" |
22 #include "chrome/common/chrome_paths.h" | 22 #include "chrome/common/chrome_paths.h" |
23 #include "chrome/test/base/browser_with_test_window_test.h" | 23 #include "chrome/test/base/browser_with_test_window_test.h" |
24 #include "chrome/test/base/testing_profile.h" | 24 #include "chrome/test/base/testing_profile.h" |
25 #include "components/sessions/serialized_navigation_entry_test_helper.h" | 25 #include "components/sessions/serialized_navigation_entry_test_helper.h" |
26 #include "content/public/browser/navigation_entry.h" | 26 #include "content/public/browser/navigation_entry.h" |
27 #include "content/public/browser/notification_observer.h" | 27 #include "content/public/browser/notification_observer.h" |
28 #include "content/public/browser/notification_registrar.h" | 28 #include "content/public/browser/notification_registrar.h" |
29 #include "content/public/browser/notification_service.h" | 29 #include "content/public/browser/notification_service.h" |
| 30 #include "content/public/common/page_state.h" |
30 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
31 #include "third_party/WebKit/Source/Platform/chromium/public/WebData.h" | 32 #include "third_party/WebKit/Source/Platform/chromium/public/WebData.h" |
32 #include "third_party/WebKit/Source/Platform/chromium/public/WebHTTPBody.h" | 33 #include "third_party/WebKit/Source/Platform/chromium/public/WebHTTPBody.h" |
33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" | 34 #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" |
34 #include "webkit/glue/glue_serialize.h" | |
35 | 35 |
36 using content::NavigationEntry; | 36 using content::NavigationEntry; |
37 using sessions::SerializedNavigationEntry; | 37 using sessions::SerializedNavigationEntry; |
38 using sessions::SerializedNavigationEntryTestHelper; | 38 using sessions::SerializedNavigationEntryTestHelper; |
39 | 39 |
40 class SessionServiceTest : public BrowserWithTestWindowTest, | 40 class SessionServiceTest : public BrowserWithTestWindowTest, |
41 public content::NotificationObserver { | 41 public content::NotificationObserver { |
42 public: | 42 public: |
43 SessionServiceTest() : window_bounds(0, 1, 2, 3), sync_save_count_(0) {} | 43 SessionServiceTest() : window_bounds(0, 1, 2, 3), sync_save_count_(0) {} |
44 | 44 |
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 ScopedVector<SessionWindow> windows; | 774 ScopedVector<SessionWindow> windows; |
775 ReadWindows(&(windows.get()), NULL); | 775 ReadWindows(&(windows.get()), NULL); |
776 ASSERT_EQ(1U, windows.size()); | 776 ASSERT_EQ(1U, windows.size()); |
777 EXPECT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); | 777 EXPECT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); |
778 } | 778 } |
779 | 779 |
780 TEST_F(SessionServiceTest, KeepPostDataWithoutPasswords) { | 780 TEST_F(SessionServiceTest, KeepPostDataWithoutPasswords) { |
781 SessionID tab_id; | 781 SessionID tab_id; |
782 ASSERT_NE(window_id.id(), tab_id.id()); | 782 ASSERT_NE(window_id.id(), tab_id.id()); |
783 | 783 |
784 // Create a content state representing a HTTP body without posted passwords. | 784 // Create a page state representing a HTTP body without posted passwords. |
785 WebKit::WebHTTPBody http_body; | 785 content::PageState page_state = |
786 http_body.initialize(); | 786 content::PageState::CreateForTesting(GURL(), false, "data", NULL); |
787 const char char_data[] = "data"; | |
788 http_body.appendData(WebKit::WebData(char_data, sizeof(char_data)-1)); | |
789 WebKit::WebHistoryItem history_item; | |
790 history_item.initialize(); | |
791 history_item.setHTTPBody(http_body); | |
792 std::string content_state = webkit_glue::HistoryItemToString(history_item); | |
793 | 787 |
794 // Create a TabNavigation containing content_state and representing a POST | 788 // Create a TabNavigation containing page_state and representing a POST |
795 // request. | 789 // request. |
796 SerializedNavigationEntry nav1 = | 790 SerializedNavigationEntry nav1 = |
797 SerializedNavigationEntryTestHelper::CreateNavigation( | 791 SerializedNavigationEntryTestHelper::CreateNavigation( |
798 "http://google.com", "title"); | 792 "http://google.com", "title"); |
799 SerializedNavigationEntryTestHelper::SetContentState(content_state, &nav1); | 793 SerializedNavigationEntryTestHelper::SetPageState(page_state, &nav1); |
800 SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); | 794 SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); |
801 | 795 |
802 // Create a TabNavigation containing content_state and representing a normal | 796 // Create a TabNavigation containing page_state and representing a normal |
803 // request. | 797 // request. |
804 SerializedNavigationEntry nav2 = | 798 SerializedNavigationEntry nav2 = |
805 SerializedNavigationEntryTestHelper::CreateNavigation( | 799 SerializedNavigationEntryTestHelper::CreateNavigation( |
806 "http://google.com/nopost", "title"); | 800 "http://google.com/nopost", "title"); |
807 SerializedNavigationEntryTestHelper::SetContentState(content_state, &nav2); | 801 SerializedNavigationEntryTestHelper::SetPageState(page_state, &nav2); |
808 nav2.set_index(1); | 802 nav2.set_index(1); |
809 | 803 |
810 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); | 804 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); |
811 UpdateNavigation(window_id, tab_id, nav1, true); | 805 UpdateNavigation(window_id, tab_id, nav1, true); |
812 UpdateNavigation(window_id, tab_id, nav2, true); | 806 UpdateNavigation(window_id, tab_id, nav2, true); |
813 | 807 |
814 ScopedVector<SessionWindow> windows; | 808 ScopedVector<SessionWindow> windows; |
815 ReadWindows(&(windows.get()), NULL); | 809 ReadWindows(&(windows.get()), NULL); |
816 | 810 |
817 helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); | 811 helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); |
818 | 812 |
819 // Expected: the content state of both navigations was saved and restored. | 813 // Expected: the page state of both navigations was saved and restored. |
820 ASSERT_EQ(2u, windows[0]->tabs[0]->navigations.size()); | 814 ASSERT_EQ(2u, windows[0]->tabs[0]->navigations.size()); |
821 helper_.AssertNavigationEquals(nav1, windows[0]->tabs[0]->navigations[0]); | 815 helper_.AssertNavigationEquals(nav1, windows[0]->tabs[0]->navigations[0]); |
822 helper_.AssertNavigationEquals(nav2, windows[0]->tabs[0]->navigations[1]); | 816 helper_.AssertNavigationEquals(nav2, windows[0]->tabs[0]->navigations[1]); |
823 } | 817 } |
824 | 818 |
825 TEST_F(SessionServiceTest, RemovePostDataWithPasswords) { | 819 TEST_F(SessionServiceTest, RemovePostDataWithPasswords) { |
826 SessionID tab_id; | 820 SessionID tab_id; |
827 ASSERT_NE(window_id.id(), tab_id.id()); | 821 ASSERT_NE(window_id.id(), tab_id.id()); |
828 | 822 |
829 // Create a content state representing a HTTP body with posted passwords. | 823 // Create a page state representing a HTTP body with posted passwords. |
830 WebKit::WebHTTPBody http_body; | 824 content::PageState page_state = |
831 http_body.initialize(); | 825 content::PageState::CreateForTesting(GURL(), true, "data", NULL); |
832 const char char_data[] = "data"; | |
833 http_body.appendData(WebKit::WebData(char_data, sizeof(char_data)-1)); | |
834 http_body.setContainsPasswordData(true); | |
835 WebKit::WebHistoryItem history_item; | |
836 history_item.initialize(); | |
837 history_item.setHTTPBody(http_body); | |
838 std::string content_state = webkit_glue::HistoryItemToString(history_item); | |
839 | 826 |
840 // Create a TabNavigation containing content_state and representing a POST | 827 // Create a TabNavigation containing page_state and representing a POST |
841 // request with passwords. | 828 // request with passwords. |
842 SerializedNavigationEntry nav1 = | 829 SerializedNavigationEntry nav1 = |
843 SerializedNavigationEntryTestHelper::CreateNavigation( | 830 SerializedNavigationEntryTestHelper::CreateNavigation( |
844 "http://google.com", "title"); | 831 "http://google.com", "title"); |
845 SerializedNavigationEntryTestHelper::SetContentState(content_state, &nav1); | 832 SerializedNavigationEntryTestHelper::SetPageState(page_state, &nav1); |
846 SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); | 833 SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); |
847 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); | 834 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); |
848 UpdateNavigation(window_id, tab_id, nav1, true); | 835 UpdateNavigation(window_id, tab_id, nav1, true); |
849 | 836 |
850 ScopedVector<SessionWindow> windows; | 837 ScopedVector<SessionWindow> windows; |
851 ReadWindows(&(windows.get()), NULL); | 838 ReadWindows(&(windows.get()), NULL); |
852 | 839 |
853 helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); | 840 helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); |
854 | 841 |
855 // Expected: the HTTP body was removed from the content state of the POST | 842 // Expected: the HTTP body was removed from the page state of the POST |
856 // navigation with passwords. | 843 // navigation with passwords. |
857 EXPECT_NE(content_state, windows[0]->tabs[0]->navigations[0].content_state()); | 844 EXPECT_NE(page_state, windows[0]->tabs[0]->navigations[0].page_state()); |
858 } | 845 } |
859 | 846 |
860 // This test is only applicable to chromeos. | 847 // This test is only applicable to chromeos. |
861 #if defined(OS_CHROMEOS) | 848 #if defined(OS_CHROMEOS) |
862 // Verifies migration of tab/window closed works. | 849 // Verifies migration of tab/window closed works. |
863 TEST_F(SessionServiceTest, CanOpenV1TabClosed) { | 850 TEST_F(SessionServiceTest, CanOpenV1TabClosed) { |
864 base::FilePath v1_file_path; | 851 base::FilePath v1_file_path; |
865 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &v1_file_path)); | 852 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &v1_file_path)); |
866 // v1_session_file contains a tab closed command with the original id. The | 853 // v1_session_file contains a tab closed command with the original id. The |
867 // file was generated from ClosingTabStaysClosed. If we successfully processed | 854 // file was generated from ClosingTabStaysClosed. If we successfully processed |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 service()->ScheduleCommand( | 979 service()->ScheduleCommand( |
993 service()->CreateSetActiveWindowCommand(window_id)); | 980 service()->CreateSetActiveWindowCommand(window_id)); |
994 service()->ScheduleCommand( | 981 service()->ScheduleCommand( |
995 service()->CreateSetActiveWindowCommand(window2_id)); | 982 service()->CreateSetActiveWindowCommand(window2_id)); |
996 | 983 |
997 ScopedVector<SessionWindow> windows; | 984 ScopedVector<SessionWindow> windows; |
998 SessionID::id_type active_window_id = 0; | 985 SessionID::id_type active_window_id = 0; |
999 ReadWindows(&(windows.get()), &active_window_id); | 986 ReadWindows(&(windows.get()), &active_window_id); |
1000 EXPECT_EQ(window2_id.id(), active_window_id); | 987 EXPECT_EQ(window2_id.id(), active_window_id); |
1001 } | 988 } |
OLD | NEW |