| 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 |