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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "chrome/browser/download/download_history.h" | 26 #include "chrome/browser/download/download_history.h" |
27 #include "chrome/browser/download/download_prefs.h" | 27 #include "chrome/browser/download/download_prefs.h" |
28 #include "chrome/browser/download/download_service.h" | 28 #include "chrome/browser/download/download_service.h" |
29 #include "chrome/browser/download/download_service_factory.h" | 29 #include "chrome/browser/download/download_service_factory.h" |
30 #include "chrome/browser/download/save_package_file_picker.h" | 30 #include "chrome/browser/download/save_package_file_picker.h" |
31 #include "chrome/browser/net/url_request_mock_util.h" | 31 #include "chrome/browser/net/url_request_mock_util.h" |
32 #include "chrome/browser/profiles/profile.h" | 32 #include "chrome/browser/profiles/profile.h" |
33 #include "chrome/browser/ui/browser.h" | 33 #include "chrome/browser/ui/browser.h" |
34 #include "chrome/browser/ui/browser_commands.h" | 34 #include "chrome/browser/ui/browser_commands.h" |
35 #include "chrome/browser/ui/browser_window.h" | 35 #include "chrome/browser/ui/browser_window.h" |
| 36 #include "chrome/browser/ui/login/login_handler.h" |
| 37 #include "chrome/browser/ui/login/login_handler_test_utils.h" |
36 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 38 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
37 #include "chrome/common/chrome_paths.h" | 39 #include "chrome/common/chrome_paths.h" |
38 #include "chrome/common/chrome_switches.h" | 40 #include "chrome/common/chrome_switches.h" |
39 #include "chrome/common/pref_names.h" | 41 #include "chrome/common/pref_names.h" |
40 #include "chrome/common/url_constants.h" | 42 #include "chrome/common/url_constants.h" |
41 #include "chrome/test/base/in_process_browser_test.h" | 43 #include "chrome/test/base/in_process_browser_test.h" |
42 #include "chrome/test/base/ui_test_utils.h" | 44 #include "chrome/test/base/ui_test_utils.h" |
43 #include "components/history/core/browser/download_constants.h" | 45 #include "components/history/core/browser/download_constants.h" |
44 #include "components/history/core/browser/download_row.h" | 46 #include "components/history/core/browser/download_row.h" |
45 #include "components/prefs/pref_member.h" | 47 #include "components/prefs/pref_member.h" |
46 #include "components/prefs/pref_service.h" | 48 #include "components/prefs/pref_service.h" |
47 #include "content/public/browser/download_item.h" | 49 #include "content/public/browser/download_item.h" |
48 #include "content/public/browser/download_manager.h" | 50 #include "content/public/browser/download_manager.h" |
| 51 #include "content/public/browser/navigation_controller.h" |
49 #include "content/public/browser/notification_service.h" | 52 #include "content/public/browser/notification_service.h" |
50 #include "content/public/browser/notification_types.h" | 53 #include "content/public/browser/notification_types.h" |
51 #include "content/public/browser/render_frame_host.h" | 54 #include "content/public/browser/render_frame_host.h" |
52 #include "content/public/browser/render_process_host.h" | 55 #include "content/public/browser/render_process_host.h" |
53 #include "content/public/browser/web_contents.h" | 56 #include "content/public/browser/web_contents.h" |
54 #include "content/public/common/content_switches.h" | 57 #include "content/public/common/content_switches.h" |
| 58 #include "content/public/common/referrer.h" |
55 #include "content/public/common/url_constants.h" | 59 #include "content/public/common/url_constants.h" |
56 #include "content/public/test/browser_test_utils.h" | 60 #include "content/public/test/browser_test_utils.h" |
| 61 #include "content/public/test/test_navigation_observer.h" |
57 #include "content/public/test/test_utils.h" | 62 #include "content/public/test/test_utils.h" |
58 #include "net/base/filename_util.h" | 63 #include "net/base/filename_util.h" |
59 #include "net/dns/mock_host_resolver.h" | 64 #include "net/dns/mock_host_resolver.h" |
60 #include "net/test/embedded_test_server/embedded_test_server.h" | 65 #include "net/test/embedded_test_server/embedded_test_server.h" |
61 #include "net/test/url_request/url_request_mock_http_job.h" | 66 #include "net/test/url_request/url_request_mock_http_job.h" |
62 #include "testing/gmock/include/gmock/gmock.h" | 67 #include "testing/gmock/include/gmock/gmock.h" |
63 #include "testing/gtest/include/gtest/gtest.h" | 68 #include "testing/gtest/include/gtest/gtest.h" |
64 | 69 |
65 using content::BrowserContext; | 70 using content::BrowserContext; |
66 using content::BrowserThread; | 71 using content::BrowserThread; |
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 EXPECT_TRUE(base::DirectoryExists(dir)); | 982 EXPECT_TRUE(base::DirectoryExists(dir)); |
978 EXPECT_TRUE(base::PathExists(full_file_name)); | 983 EXPECT_TRUE(base::PathExists(full_file_name)); |
979 } | 984 } |
980 | 985 |
981 // Test suite that verifies that the frame tree "looks" the same before | 986 // Test suite that verifies that the frame tree "looks" the same before |
982 // and after a save-page-as. | 987 // and after a save-page-as. |
983 class SavePageOriginalVsSavedComparisonTest | 988 class SavePageOriginalVsSavedComparisonTest |
984 : public SavePageSitePerProcessBrowserTest, | 989 : public SavePageSitePerProcessBrowserTest, |
985 public ::testing::WithParamInterface<content::SavePageType> { | 990 public ::testing::WithParamInterface<content::SavePageType> { |
986 protected: | 991 protected: |
987 void TestOriginalVsSavedPage( | 992 void TestCurrentVsSavedPage( |
988 content::SavePageType save_page_type, | 993 content::SavePageType save_page_type, |
989 const GURL& url, | |
990 int expected_number_of_frames, | 994 int expected_number_of_frames, |
991 const std::vector<std::string>& expected_substrings) { | 995 const std::vector<std::string>& expected_substrings) { |
992 // Navigate to the test page and verify if test expectations | 996 // Verify if test expectations are met on the current page (this is mostly |
993 // are met (this is mostly a sanity check - a failure to meet | 997 // a sanity check - a failure to meet expectations would probably mean that |
994 // expectations would probably mean that there is a test bug | 998 // there is a test bug (i.e. that we got called with wrong expected_foo |
995 // (i.e. that we got called with wrong expected_foo argument). | 999 // argument). |
996 ui_test_utils::NavigateToURL(browser(), url); | 1000 GURL original_url = GetCurrentTab(browser())->GetLastCommittedURL(); |
997 DLOG(INFO) << "Verifying test expectations for original page... : " | 1001 DLOG(INFO) << "Verifying test expectations for original page... : " |
998 << GetCurrentTab(browser())->GetLastCommittedURL(); | 1002 << original_url; |
999 AssertExpectationsAboutCurrentTab(expected_number_of_frames, | 1003 AssertExpectationsAboutCurrentTab(expected_number_of_frames, |
1000 expected_substrings); | 1004 expected_substrings); |
1001 | 1005 |
1002 // Save the page. | 1006 // Save the page. |
1003 base::FilePath full_file_name, dir; | 1007 base::FilePath full_file_name, dir; |
1004 SaveCurrentTab(url, save_page_type, "save_result", -1, &dir, | 1008 SaveCurrentTab(original_url, save_page_type, "save_result", -1, &dir, |
1005 &full_file_name); | 1009 &full_file_name); |
1006 ASSERT_FALSE(HasFailure()); | 1010 ASSERT_FALSE(HasFailure()); |
1007 | 1011 |
1008 // Stop the test server (to make sure the locally saved page | 1012 // Stop the test server (to make sure the locally saved page |
1009 // is self-contained / won't try to open original resources). | 1013 // is self-contained / won't try to open original resources). |
1010 ASSERT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); | 1014 ASSERT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); |
1011 | 1015 |
1012 // Open the saved page and verify if test expectations are | 1016 // Open the saved page and verify if test expectations are |
1013 // met (i.e. if the same expectations are met for "after" | 1017 // met (i.e. if the same expectations are met for "after" |
1014 // [saved version of the page] as for the "before" | 1018 // [saved version of the page] as for the "before" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1078 std::string arr[] = { | 1082 std::string arr[] = { |
1079 "frames-xsite.htm: 896fd88d-a77a-4f46-afd8-24db7d5af9c2", | 1083 "frames-xsite.htm: 896fd88d-a77a-4f46-afd8-24db7d5af9c2", |
1080 "a.htm: 1b8aae2b-e164-462f-bd5b-98aa366205f2", | 1084 "a.htm: 1b8aae2b-e164-462f-bd5b-98aa366205f2", |
1081 "b.htm: 3a35f7fa-96a9-4487-9f18-4470263907fa", | 1085 "b.htm: 3a35f7fa-96a9-4487-9f18-4470263907fa", |
1082 }; | 1086 }; |
1083 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1087 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1084 | 1088 |
1085 GURL url( | 1089 GURL url( |
1086 embedded_test_server()->GetURL("a.com", "/save_page/frames-xsite.htm")); | 1090 embedded_test_server()->GetURL("a.com", "/save_page/frames-xsite.htm")); |
1087 | 1091 |
1088 TestOriginalVsSavedPage(save_page_type, url, 3, expected_substrings); | 1092 ui_test_utils::NavigateToURL(browser(), url); |
| 1093 TestCurrentVsSavedPage(save_page_type, 3, expected_substrings); |
1089 } | 1094 } |
1090 | 1095 |
1091 // Test compares original-vs-saved for a page with <object> elements. | 1096 // Test compares original-vs-saved for a page with <object> elements. |
1092 // (see crbug.com/553478). | 1097 // (see crbug.com/553478). |
1093 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, ObjectElements) { | 1098 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, ObjectElements) { |
1094 content::SavePageType save_page_type = GetParam(); | 1099 content::SavePageType save_page_type = GetParam(); |
1095 | 1100 |
1096 // 4 = main frame + iframe + object w/ html doc + object w/ pdf doc | 1101 // 4 = main frame + iframe + object w/ html doc + object w/ pdf doc |
1097 // (svg and png objects do not get a separate frame) | 1102 // (svg and png objects do not get a separate frame) |
1098 int expected_number_of_frames = 6; | 1103 int expected_number_of_frames = 6; |
1099 | 1104 |
1100 std::string arr[] = { | 1105 std::string arr[] = { |
1101 "frames-objects.htm: 8da13db4-a512-4d9b-b1c5-dc1c134234b9", | 1106 "frames-objects.htm: 8da13db4-a512-4d9b-b1c5-dc1c134234b9", |
1102 "a.htm: 1b8aae2b-e164-462f-bd5b-98aa366205f2", | 1107 "a.htm: 1b8aae2b-e164-462f-bd5b-98aa366205f2", |
1103 "b.htm: 3a35f7fa-96a9-4487-9f18-4470263907fa", | 1108 "b.htm: 3a35f7fa-96a9-4487-9f18-4470263907fa", |
1104 "frames-nested.htm: 4388232f-8d45-4d2e-9807-721b381be153", | 1109 "frames-nested.htm: 4388232f-8d45-4d2e-9807-721b381be153", |
1105 "frames-nested2.htm: 6d23dc47-f283-4977-96ec-66bcf72301a4", | 1110 "frames-nested2.htm: 6d23dc47-f283-4977-96ec-66bcf72301a4", |
1106 }; | 1111 }; |
1107 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1112 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1108 | 1113 |
1109 GURL url( | |
1110 embedded_test_server()->GetURL("a.com", "/save_page/frames-objects.htm")); | |
1111 | |
1112 // TODO(lukasza): crbug.com/553478: Enable <object> testing of MHTML. | 1114 // TODO(lukasza): crbug.com/553478: Enable <object> testing of MHTML. |
1113 if (save_page_type == content::SAVE_PAGE_TYPE_AS_MHTML) | 1115 if (save_page_type == content::SAVE_PAGE_TYPE_AS_MHTML) |
1114 return; | 1116 return; |
1115 | 1117 |
1116 TestOriginalVsSavedPage(save_page_type, url, expected_number_of_frames, | 1118 GURL url( |
1117 expected_substrings); | 1119 embedded_test_server()->GetURL("a.com", "/save_page/frames-objects.htm")); |
| 1120 ui_test_utils::NavigateToURL(browser(), url); |
| 1121 TestCurrentVsSavedPage(save_page_type, expected_number_of_frames, |
| 1122 expected_substrings); |
1118 } | 1123 } |
1119 | 1124 |
1120 // Test compares original-vs-saved for a page with frames at about:blank uri. | 1125 // Test compares original-vs-saved for a page with frames at about:blank uri. |
1121 // This tests handling of iframe elements without src attribute (only with | 1126 // This tests handling of iframe elements without src attribute (only with |
1122 // srcdoc attribute) and how they get saved / cross-referenced. | 1127 // srcdoc attribute) and how they get saved / cross-referenced. |
1123 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, AboutBlank) { | 1128 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, AboutBlank) { |
1124 content::SavePageType save_page_type = GetParam(); | 1129 content::SavePageType save_page_type = GetParam(); |
1125 | 1130 |
1126 std::string arr[] = { | 1131 std::string arr[] = { |
1127 "main: acb0609d-eb10-4c26-83e2-ad8afb7b0ff3", | 1132 "main: acb0609d-eb10-4c26-83e2-ad8afb7b0ff3", |
1128 "sub1: b124df3a-d39f-47a1-ae04-5bb5d0bf549e", | 1133 "sub1: b124df3a-d39f-47a1-ae04-5bb5d0bf549e", |
1129 "sub2: 07014068-604d-45ae-884f-a068cfe7bc0a", | 1134 "sub2: 07014068-604d-45ae-884f-a068cfe7bc0a", |
1130 "sub3: 06cc8fcc-c692-4a1a-a10f-1645b746e8f4", | 1135 "sub3: 06cc8fcc-c692-4a1a-a10f-1645b746e8f4", |
1131 }; | 1136 }; |
1132 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1137 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1133 | 1138 |
1134 GURL url(embedded_test_server()->GetURL("a.com", | 1139 GURL url(embedded_test_server()->GetURL("a.com", |
1135 "/save_page/frames-about-blank.htm")); | 1140 "/save_page/frames-about-blank.htm")); |
1136 | 1141 ui_test_utils::NavigateToURL(browser(), url); |
1137 TestOriginalVsSavedPage(save_page_type, url, 4, expected_substrings); | 1142 TestCurrentVsSavedPage(save_page_type, 4, expected_substrings); |
1138 } | 1143 } |
1139 | 1144 |
1140 // Test compares original-vs-saved for a page with nested frames. | 1145 // Test compares original-vs-saved for a page with nested frames. |
1141 // Two levels of nesting are especially good for verifying correct | 1146 // Two levels of nesting are especially good for verifying correct |
1142 // link rewriting for subframes-vs-main-frame (see crbug.com/554666). | 1147 // link rewriting for subframes-vs-main-frame (see crbug.com/554666). |
1143 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, NestedFrames) { | 1148 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, NestedFrames) { |
1144 content::SavePageType save_page_type = GetParam(); | 1149 content::SavePageType save_page_type = GetParam(); |
1145 | 1150 |
1146 std::string arr[] = { | 1151 std::string arr[] = { |
1147 "frames-nested.htm: 4388232f-8d45-4d2e-9807-721b381be153", | 1152 "frames-nested.htm: 4388232f-8d45-4d2e-9807-721b381be153", |
1148 "frames-nested2.htm: 6d23dc47-f283-4977-96ec-66bcf72301a4", | 1153 "frames-nested2.htm: 6d23dc47-f283-4977-96ec-66bcf72301a4", |
1149 "b.htm: 3a35f7fa-96a9-4487-9f18-4470263907fa", | 1154 "b.htm: 3a35f7fa-96a9-4487-9f18-4470263907fa", |
1150 }; | 1155 }; |
1151 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1156 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1152 | 1157 |
1153 GURL url( | 1158 GURL url( |
1154 embedded_test_server()->GetURL("a.com", "/save_page/frames-nested.htm")); | 1159 embedded_test_server()->GetURL("a.com", "/save_page/frames-nested.htm")); |
1155 | 1160 ui_test_utils::NavigateToURL(browser(), url); |
1156 TestOriginalVsSavedPage(save_page_type, url, 3, expected_substrings); | 1161 TestCurrentVsSavedPage(save_page_type, 3, expected_substrings); |
1157 } | 1162 } |
1158 | 1163 |
1159 // Test for crbug.com/106364 and crbug.com/538188. | 1164 // Test for crbug.com/106364 and crbug.com/538188. |
1160 // Test frames have the same uri ... | 1165 // Test frames have the same uri ... |
1161 // subframe1 and subframe2 - both have src=b.htm | 1166 // subframe1 and subframe2 - both have src=b.htm |
1162 // subframe3 and subframe4 - about:blank (no src, only srcdoc attribute). | 1167 // subframe3 and subframe4 - about:blank (no src, only srcdoc attribute). |
1163 // ... but different content (generated by main frame's javascript). | 1168 // ... but different content (generated by main frame's javascript). |
1164 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, RuntimeChanges) { | 1169 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, RuntimeChanges) { |
1165 content::SavePageType save_page_type = GetParam(); | 1170 content::SavePageType save_page_type = GetParam(); |
1166 | 1171 |
1167 std::string arr[] = { | 1172 std::string arr[] = { |
1168 "frames-runtime-changes.htm: 4388232f-8d45-4d2e-9807-721b381be153", | 1173 "frames-runtime-changes.htm: 4388232f-8d45-4d2e-9807-721b381be153", |
1169 "subframe1: 21595339-61fc-4854-b6df-0668328ea263", | 1174 "subframe1: 21595339-61fc-4854-b6df-0668328ea263", |
1170 "subframe2: adf55719-15e7-45be-9eda-d12fe782a1bd", | 1175 "subframe2: adf55719-15e7-45be-9eda-d12fe782a1bd", |
1171 "subframe3: 50e294bf-3a5b-499d-8772-651ead26952f", | 1176 "subframe3: 50e294bf-3a5b-499d-8772-651ead26952f", |
1172 "subframe4: e0ea9289-7467-4d32-ba5c-c604e8d84cb7", | 1177 "subframe4: e0ea9289-7467-4d32-ba5c-c604e8d84cb7", |
1173 }; | 1178 }; |
1174 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1179 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1175 | 1180 |
1176 GURL url(embedded_test_server()->GetURL( | 1181 GURL url(embedded_test_server()->GetURL( |
1177 "a.com", "/save_page/frames-runtime-changes.htm?do_runtime_changes=1")); | 1182 "a.com", "/save_page/frames-runtime-changes.htm?do_runtime_changes=1")); |
1178 | 1183 ui_test_utils::NavigateToURL(browser(), url); |
1179 TestOriginalVsSavedPage(save_page_type, url, 5, expected_substrings); | 1184 TestCurrentVsSavedPage(save_page_type, 5, expected_substrings); |
1180 } | 1185 } |
1181 | 1186 |
1182 // Test for saving frames with various encodings: | 1187 // Test for saving frames with various encodings: |
1183 // - iso-8859-2: encoding declared via <meta> element | 1188 // - iso-8859-2: encoding declared via <meta> element |
1184 // - utf16-le-bom.htm, utf16-be-bom.htm: encoding detected via BOM | 1189 // - utf16-le-bom.htm, utf16-be-bom.htm: encoding detected via BOM |
1185 // - utf16-le-nobom.htm, utf16-le-nobom.htm, utf32.htm - encoding declared via | 1190 // - utf16-le-nobom.htm, utf16-le-nobom.htm, utf32.htm - encoding declared via |
1186 // mocked http headers | 1191 // mocked http headers |
1187 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, Encoding) { | 1192 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, Encoding) { |
1188 content::SavePageType save_page_type = GetParam(); | 1193 content::SavePageType save_page_type = GetParam(); |
1189 | 1194 |
1190 std::string arr[] = { | 1195 std::string arr[] = { |
1191 "frames-encodings.htm: f53295dd-a95b-4b32-85f5-b6e15377fb20", | 1196 "frames-encodings.htm: f53295dd-a95b-4b32-85f5-b6e15377fb20", |
1192 "iso-8859-2.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " | 1197 "iso-8859-2.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " |
1193 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", | 1198 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", |
1194 "utf16-le-nobom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " | 1199 "utf16-le-nobom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " |
1195 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", | 1200 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", |
1196 "utf16-le-bom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " | 1201 "utf16-le-bom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " |
1197 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", | 1202 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", |
1198 "utf16-be-nobom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " | 1203 "utf16-be-nobom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " |
1199 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", | 1204 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", |
1200 "utf16-be-bom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " | 1205 "utf16-be-bom.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " |
1201 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", | 1206 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", |
1202 "utf32.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " | 1207 "utf32.htm: Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 " |
1203 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", | 1208 "g\xc4\x99\xc5\x9bl\xc4\x85 ja\xc5\xba\xc5\x84", |
1204 }; | 1209 }; |
1205 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1210 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1206 | 1211 |
1207 GURL url(embedded_test_server()->GetURL("a.com", | |
1208 "/save_page/frames-encodings.htm")); | |
1209 | |
1210 // TODO(lukasza): crbug.com/541699: MHTML needs to handle multi-byte encodings | 1212 // TODO(lukasza): crbug.com/541699: MHTML needs to handle multi-byte encodings |
1211 // by either: | 1213 // by either: |
1212 // 1. Continuing to preserve the original encoding, but starting to round-trip | 1214 // 1. Continuing to preserve the original encoding, but starting to round-trip |
1213 // the encoding declaration (in Content-Type MIME/MHTML header?) | 1215 // the encoding declaration (in Content-Type MIME/MHTML header?) |
1214 // 2. Saving html docs in UTF8. | 1216 // 2. Saving html docs in UTF8. |
1215 // 3. Saving the BOM (not sure if this will help for all cases though). | 1217 // 3. Saving the BOM (not sure if this will help for all cases though). |
1216 if (save_page_type == content::SAVE_PAGE_TYPE_AS_MHTML) | 1218 if (save_page_type == content::SAVE_PAGE_TYPE_AS_MHTML) |
1217 return; | 1219 return; |
1218 | 1220 |
1219 TestOriginalVsSavedPage(save_page_type, url, 7, expected_substrings); | 1221 GURL url(embedded_test_server()->GetURL("a.com", |
| 1222 "/save_page/frames-encodings.htm")); |
| 1223 ui_test_utils::NavigateToURL(browser(), url); |
| 1224 TestCurrentVsSavedPage(save_page_type, 7, expected_substrings); |
1220 } | 1225 } |
1221 | 1226 |
1222 // Test for saving style element and attribute (see also crbug.com/568293). | 1227 // Test for saving style element and attribute (see also crbug.com/568293). |
1223 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, Style) { | 1228 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, Style) { |
1224 content::SavePageType save_page_type = GetParam(); | 1229 content::SavePageType save_page_type = GetParam(); |
1225 | 1230 |
1226 std::string arr[] = { | 1231 std::string arr[] = { |
1227 "style.htm: af84c3ca-0fc6-4b0d-bf7a-5ac18a4dab62", | 1232 "style.htm: af84c3ca-0fc6-4b0d-bf7a-5ac18a4dab62", |
1228 "frameE: c9539ccd-47b0-47cf-a03b-734614865872", | 1233 "frameE: c9539ccd-47b0-47cf-a03b-734614865872", |
1229 }; | 1234 }; |
1230 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1235 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1231 | 1236 |
1232 GURL url(embedded_test_server()->GetURL("a.com", "/save_page/style.htm")); | 1237 GURL url(embedded_test_server()->GetURL("a.com", "/save_page/style.htm")); |
1233 | 1238 ui_test_utils::NavigateToURL(browser(), url); |
1234 TestOriginalVsSavedPage(save_page_type, url, 6, expected_substrings); | 1239 TestCurrentVsSavedPage(save_page_type, 6, expected_substrings); |
1235 } | 1240 } |
1236 | 1241 |
1237 // Test for saving a page with broken subresources: | 1242 // Test for saving a page with broken subresources: |
1238 // - Broken, undecodable image (see also https://crbug.com/586680) | 1243 // - Broken, undecodable image (see also https://crbug.com/586680) |
1239 // - Broken link, to unresolvable host (see also https://crbug.com/594219) | 1244 // - Broken link, to unresolvable host (see also https://crbug.com/594219) |
| 1245 // - Resource requiring authentication |
1240 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, BrokenImage) { | 1246 IN_PROC_BROWSER_TEST_P(SavePageOriginalVsSavedComparisonTest, BrokenImage) { |
1241 // Clear resolver rules to make sure that *.no.such.host used in the test html | 1247 // Clear resolver rules to make sure that *.no.such.host used in the test html |
1242 // doesn't resolve to 127.0.0.1 | 1248 // doesn't resolve to 127.0.0.1 |
1243 host_resolver()->ClearRules(); | 1249 host_resolver()->ClearRules(); |
1244 | 1250 |
1245 content::SavePageType save_page_type = GetParam(); | 1251 content::SavePageType save_page_type = GetParam(); |
1246 | 1252 |
1247 std::string arr[] = { | 1253 std::string arr[] = { |
1248 "broken-image.htm: 1e846775-b3ed-4d9c-a124-029554a1eb9d", | 1254 "broken-image.htm: 1e846775-b3ed-4d9c-a124-029554a1eb9d", |
1249 }; | 1255 }; |
1250 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); | 1256 std::vector<std::string> expected_substrings(std::begin(arr), std::end(arr)); |
1251 | 1257 |
| 1258 // Navigate to the test URL and dismiss the auth dialog. |
1252 GURL url(embedded_test_server()->GetURL("127.0.0.1", | 1259 GURL url(embedded_test_server()->GetURL("127.0.0.1", |
1253 "/save_page/broken-image.htm")); | 1260 "/save_page/broken-image.htm")); |
| 1261 content::WebContents* web_contents = |
| 1262 browser()->tab_strip_model()->GetActiveWebContents(); |
| 1263 content::TestNavigationObserver navigation_observer(web_contents, 1); |
| 1264 content::NavigationController* navigation_controller = |
| 1265 &web_contents->GetController(); |
| 1266 LoginPromptBrowserTestObserver login_observer; |
| 1267 login_observer.Register( |
| 1268 content::Source<content::NavigationController>(navigation_controller)); |
| 1269 WindowedAuthNeededObserver auth_needed_waiter(navigation_controller); |
| 1270 web_contents->OpenURL(content::OpenURLParams( |
| 1271 url, content::Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
| 1272 auth_needed_waiter.Wait(); |
| 1273 ASSERT_EQ(1u, login_observer.handlers().size()); |
| 1274 login_observer.handlers().front()->CancelAuth(); |
| 1275 navigation_observer.Wait(); |
1254 | 1276 |
1255 TestOriginalVsSavedPage(save_page_type, url, 1, expected_substrings); | 1277 TestCurrentVsSavedPage(save_page_type, 1, expected_substrings); |
1256 } | 1278 } |
1257 | 1279 |
1258 INSTANTIATE_TEST_CASE_P( | 1280 INSTANTIATE_TEST_CASE_P( |
1259 SaveType, | 1281 SaveType, |
1260 SavePageOriginalVsSavedComparisonTest, | 1282 SavePageOriginalVsSavedComparisonTest, |
1261 ::testing::Values(content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML, | 1283 ::testing::Values(content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML, |
1262 content::SAVE_PAGE_TYPE_AS_MHTML)); | 1284 content::SAVE_PAGE_TYPE_AS_MHTML)); |
1263 | 1285 |
1264 } // namespace | 1286 } // namespace |
OLD | NEW |