| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 /** @fileoverview Suite of tests for site-list. */ | 5 /** @fileoverview Suite of tests for site-list. */ |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * An example pref with 2 blocked location items and 2 allowed. This pref | 8 * An example pref with 2 blocked location items and 2 allowed. This pref |
| 9 * is also used for the All Sites category and therefore needs values for | 9 * is also used for the All Sites category and therefore needs values for |
| 10 * all types, even though some might be blank. | 10 * all types, even though some might be blank. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 embeddingOrigin: 'https://[*.]foo.com', | 120 embeddingOrigin: 'https://[*.]foo.com', |
| 121 origin: 'https://[*.]foo.com', | 121 origin: 'https://[*.]foo.com', |
| 122 setting: 'block', | 122 setting: 'block', |
| 123 source: 'preference', | 123 source: 'preference', |
| 124 }, | 124 }, |
| 125 ] | 125 ] |
| 126 } | 126 } |
| 127 }; | 127 }; |
| 128 | 128 |
| 129 /** | 129 /** |
| 130 * An example pref with with and without embeddingOrigin. |
| 131 * @type {SiteSettingsPref} |
| 132 */ |
| 133 var prefsMixedEmbeddingOrigin = { |
| 134 exceptions: { |
| 135 images: [ |
| 136 { |
| 137 origin: 'https://foo.com', |
| 138 embeddingOrigin: 'https://example.com', |
| 139 setting: 'allow', |
| 140 source: 'preference', |
| 141 }, |
| 142 { |
| 143 origin: 'https://bar.com', |
| 144 embeddingOrigin: '', |
| 145 setting: 'allow', |
| 146 source: 'preference', |
| 147 }, |
| 148 ], |
| 149 } |
| 150 }; |
| 151 |
| 152 /** |
| 130 * An example pref with mixed origin and pattern. | 153 * An example pref with mixed origin and pattern. |
| 131 * @type {SiteSettingsPref} | 154 * @type {SiteSettingsPref} |
| 132 */ | 155 */ |
| 133 var prefsMixedOriginAndPattern = { | 156 var prefsMixedOriginAndPattern = { |
| 134 exceptions: { | 157 exceptions: { |
| 135 auto_downloads: [], | 158 auto_downloads: [], |
| 136 background_sync: [], | 159 background_sync: [], |
| 137 camera: [], | 160 camera: [], |
| 138 cookies: [], | 161 cookies: [], |
| 139 geolocation: [ | 162 geolocation: [ |
| 140 { | 163 { |
| 141 origin: 'https://foo.com', | 164 origin: 'https://foo.com', |
| 142 embeddingOrigin: '*', | 165 embeddingOrigin: 'https://example.com', |
| 143 setting: 'allow', | 166 setting: 'allow', |
| 144 source: 'preference', | 167 source: 'preference', |
| 145 }, | 168 }, |
| 146 ], | 169 ], |
| 147 images: [], | 170 images: [], |
| 148 javascript: [ | 171 javascript: [ |
| 149 { | 172 { |
| 150 origin: 'https://[*.]foo.com', | 173 origin: 'https://[*.]foo.com', |
| 151 embeddingOrigin: '*', | 174 embeddingOrigin: '', |
| 152 setting: 'allow', | 175 setting: 'allow', |
| 153 source: 'preference', | 176 source: 'preference', |
| 154 }, | 177 }, |
| 155 ], | 178 ], |
| 156 mic: [], | 179 mic: [], |
| 157 notifications: [], | 180 notifications: [], |
| 158 plugins: [], | 181 plugins: [], |
| 159 midiDevices: [], | 182 midiDevices: [], |
| 160 protectedContent: [], | 183 protectedContent: [], |
| 161 popups: [], | 184 popups: [], |
| 162 subresource_filter: [], | 185 subresource_filter: [], |
| 163 unsandboxed_plugins: [], | 186 unsandboxed_plugins: [], |
| 164 } | 187 } |
| 165 }; | 188 }; |
| 166 | 189 |
| 167 /** | 190 /** |
| 168 * An example pref with multiple categories and multiple allow/block | 191 * An example pref with multiple categories and multiple allow/block |
| 169 * state. | 192 * state. |
| 170 * @type {SiteSettingsPref} | 193 * @type {SiteSettingsPref} |
| 171 */ | 194 */ |
| 172 var prefsVarious = { | 195 var prefsVarious = { |
| 173 exceptions: { | 196 exceptions: { |
| 174 auto_downloads: [], | 197 auto_downloads: [], |
| 175 background_sync: [], | 198 background_sync: [], |
| 176 camera: [], | 199 camera: [], |
| 177 cookies: [], | 200 cookies: [], |
| 178 geolocation: [ | 201 geolocation: [ |
| 179 { | 202 { |
| 180 embeddingOrigin: 'https://foo.com', | 203 embeddingOrigin: '', |
| 181 incognito: false, | 204 incognito: false, |
| 182 origin: 'https://foo.com', | 205 origin: 'https://foo.com', |
| 183 setting: 'allow', | 206 setting: 'allow', |
| 184 source: 'preference', | 207 source: 'preference', |
| 185 }, | 208 }, |
| 186 { | 209 { |
| 187 embeddingOrigin: 'https://bar.com', | 210 embeddingOrigin: '', |
| 188 incognito: false, | 211 incognito: false, |
| 189 origin: 'https://bar.com', | 212 origin: 'https://bar.com', |
| 190 setting: 'block', | 213 setting: 'block', |
| 191 source: 'preference', | 214 source: 'preference', |
| 192 }, | 215 }, |
| 193 ], | 216 ], |
| 194 images: [], | 217 images: [], |
| 195 javascript: [], | 218 javascript: [], |
| 196 mic: [], | 219 mic: [], |
| 197 midiDevices: [], | 220 midiDevices: [], |
| 198 notifications: [ | 221 notifications: [ |
| 199 { | 222 { |
| 200 embeddingOrigin: 'https://google.com', | 223 embeddingOrigin: '', |
| 201 incognito: false, | 224 incognito: false, |
| 202 origin: 'https://google.com', | 225 origin: 'https://google.com', |
| 203 setting: 'block', | 226 setting: 'block', |
| 204 source: 'preference', | 227 source: 'preference', |
| 205 }, | 228 }, |
| 206 { | 229 { |
| 207 embeddingOrigin: 'https://bar.com', | 230 embeddingOrigin: '', |
| 208 incognito: false, | 231 incognito: false, |
| 209 origin: 'https://bar.com', | 232 origin: 'https://bar.com', |
| 210 setting: 'block', | 233 setting: 'block', |
| 211 source: 'preference', | 234 source: 'preference', |
| 212 }, | 235 }, |
| 213 { | 236 { |
| 214 embeddingOrigin: 'https://foo.com', | 237 embeddingOrigin: '', |
| 215 incognito: false, | 238 incognito: false, |
| 216 origin: 'https://foo.com', | 239 origin: 'https://foo.com', |
| 217 setting: 'block', | 240 setting: 'block', |
| 218 source: 'preference', | 241 source: 'preference', |
| 219 }, | 242 }, |
| 220 ], | 243 ], |
| 221 plugins: [], | 244 plugins: [], |
| 222 protectedContent: [], | 245 protectedContent: [], |
| 223 popups: [], | 246 popups: [], |
| 224 subresource_filter: [], | 247 subresource_filter: [], |
| 225 unsandboxed_plugins: [], | 248 unsandboxed_plugins: [], |
| 226 } | 249 } |
| 227 }; | 250 }; |
| 228 | 251 |
| 229 /** | 252 /** |
| 230 * An example pref with 1 allowed location item. | 253 * An example pref with 1 allowed location item. |
| 231 * @type {SiteSettingsPref} | 254 * @type {SiteSettingsPref} |
| 232 */ | 255 */ |
| 233 var prefsOneEnabled = { | 256 var prefsOneEnabled = { |
| 234 exceptions: { | 257 exceptions: { |
| 235 geolocation: [ | 258 geolocation: [ |
| 236 { | 259 { |
| 237 embeddingOrigin: 'https://foo-allow.com:443', | 260 embeddingOrigin: '', |
| 238 incognito: false, | 261 incognito: false, |
| 239 origin: 'https://foo-allow.com:443', | 262 origin: 'https://foo-allow.com:443', |
| 240 setting: 'allow', | 263 setting: 'allow', |
| 241 source: 'preference', | 264 source: 'preference', |
| 242 }, | 265 }, |
| 243 ] | 266 ] |
| 244 } | 267 } |
| 245 }; | 268 }; |
| 246 | 269 |
| 247 /** | 270 /** |
| 248 * An example pref with 1 blocked location item. | 271 * An example pref with 1 blocked location item. |
| 249 * @type {SiteSettingsPref} | 272 * @type {SiteSettingsPref} |
| 250 */ | 273 */ |
| 251 var prefsOneDisabled = { | 274 var prefsOneDisabled = { |
| 252 exceptions: { | 275 exceptions: { |
| 253 geolocation: [ | 276 geolocation: [ |
| 254 { | 277 { |
| 255 embeddingOrigin: 'https://foo-block.com:443', | 278 embeddingOrigin: '', |
| 256 incognito: false, | 279 incognito: false, |
| 257 origin: 'https://foo-block.com:443', | 280 origin: 'https://foo-block.com:443', |
| 258 setting: 'block', | 281 setting: 'block', |
| 259 source: 'preference', | 282 source: 'preference', |
| 260 }, | 283 }, |
| 261 ] | 284 ] |
| 262 } | 285 } |
| 263 }; | 286 }; |
| 264 | 287 |
| 265 /** | 288 /** |
| 266 * An example Cookies pref with 1 in each of the three categories. | 289 * An example Cookies pref with 1 in each of the three categories. |
| 267 * @type {SiteSettingsPref} | 290 * @type {SiteSettingsPref} |
| 268 */ | 291 */ |
| 269 var prefsSessionOnly = { | 292 var prefsSessionOnly = { |
| 270 exceptions: { | 293 exceptions: { |
| 271 cookies: [ | 294 cookies: [ |
| 272 { | 295 { |
| 273 embeddingOrigin: 'http://foo-block.com', | 296 embeddingOrigin: '', |
| 274 incognito: false, | 297 incognito: false, |
| 275 origin: 'http://foo-block.com', | 298 origin: 'http://foo-block.com', |
| 276 setting: 'block', | 299 setting: 'block', |
| 277 source: 'preference', | 300 source: 'preference', |
| 278 }, | 301 }, |
| 279 { | 302 { |
| 280 embeddingOrigin: 'http://foo-allow.com', | 303 embeddingOrigin: '', |
| 281 incognito: false, | 304 incognito: false, |
| 282 origin: 'http://foo-allow.com', | 305 origin: 'http://foo-allow.com', |
| 283 setting: 'allow', | 306 setting: 'allow', |
| 284 source: 'preference', | 307 source: 'preference', |
| 285 }, | 308 }, |
| 286 { | 309 { |
| 287 embeddingOrigin: 'http://foo-session.com', | 310 embeddingOrigin: '', |
| 288 incognito: false, | 311 incognito: false, |
| 289 origin: 'http://foo-session.com', | 312 origin: 'http://foo-session.com', |
| 290 setting: 'session_only', | 313 setting: 'session_only', |
| 291 source: 'preference', | 314 source: 'preference', |
| 292 }, | 315 }, |
| 293 ] | 316 ] |
| 294 } | 317 } |
| 295 }; | 318 }; |
| 296 | 319 |
| 297 /** | 320 /** |
| 298 * An example Cookies pref with mixed incognito and regular settings. | 321 * An example Cookies pref with mixed incognito and regular settings. |
| 299 * @type {SiteSettingsPref} | 322 * @type {SiteSettingsPref} |
| 300 */ | 323 */ |
| 301 var prefsIncognito = { | 324 var prefsIncognito = { |
| 302 exceptions: { | 325 exceptions: { |
| 303 cookies: [ | 326 cookies: [ |
| 304 // foo.com is blocked for regular sessions. | 327 // foo.com is blocked for regular sessions. |
| 305 { | 328 { |
| 306 embeddingOrigin: 'http://foo.com', | 329 embeddingOrigin: '', |
| 307 incognito: false, | 330 incognito: false, |
| 308 origin: 'http://foo.com', | 331 origin: 'http://foo.com', |
| 309 setting: 'block', | 332 setting: 'block', |
| 310 source: 'preference', | 333 source: 'preference', |
| 311 }, | 334 }, |
| 312 // bar.com is an allowed incognito item without an embedder. | 335 // bar.com is an allowed incognito item. |
| 313 { | 336 { |
| 314 embeddingOrigin: '', | 337 embeddingOrigin: '', |
| 315 incognito: true, | 338 incognito: true, |
| 316 origin: 'http://bar.com', | 339 origin: 'http://bar.com', |
| 317 setting: 'allow', | 340 setting: 'allow', |
| 318 source: 'preference', | 341 source: 'preference', |
| 319 }, | 342 }, |
| 320 // foo.com is allowed in incognito (overridden). | 343 // foo.com is allowed in incognito (overridden). |
| 321 { | 344 { |
| 322 embeddingOrigin: 'http://foo.com', | 345 embeddingOrigin: '', |
| 323 incognito: true, | 346 incognito: true, |
| 324 origin: 'http://foo.com', | 347 origin: 'http://foo.com', |
| 325 setting: 'allow', | 348 setting: 'allow', |
| 326 source: 'preference', | 349 source: 'preference', |
| 327 }, | 350 }, |
| 328 | 351 |
| 329 ] | 352 ] |
| 330 } | 353 } |
| 331 }; | 354 }; |
| 332 | 355 |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 assertMenu(['Allow', 'Clear on exit', 'Edit', 'Remove'], testElement); | 699 assertMenu(['Allow', 'Clear on exit', 'Edit', 'Remove'], testElement); |
| 677 | 700 |
| 678 // Select 'Remove' from menu. | 701 // Select 'Remove' from menu. |
| 679 var remove = testElement.$.reset; | 702 var remove = testElement.$.reset; |
| 680 assertTrue(!!remove); | 703 assertTrue(!!remove); |
| 681 MockInteractions.tap(remove); | 704 MockInteractions.tap(remove); |
| 682 return browserProxy.whenCalled('resetCategoryPermissionForOrigin'); | 705 return browserProxy.whenCalled('resetCategoryPermissionForOrigin'); |
| 683 }) | 706 }) |
| 684 .then(function(args) { | 707 .then(function(args) { |
| 685 assertEquals('http://foo.com', args[0]); | 708 assertEquals('http://foo.com', args[0]); |
| 686 assertEquals('http://foo.com', args[1]); | 709 assertEquals('', args[1]); |
| 687 assertEquals(contentType, args[2]); | 710 assertEquals(contentType, args[2]); |
| 688 assertFalse(args[3]); // Incognito. | 711 assertFalse(args[3]); // Incognito. |
| 689 }); | 712 }); |
| 690 }); | 713 }); |
| 691 | 714 |
| 692 test('initial INCOGNITO ALLOW state is correct', function() { | 715 test('initial INCOGNITO ALLOW state is correct', function() { |
| 693 var contentType = settings.ContentSettingsTypes.COOKIES; | 716 var contentType = settings.ContentSettingsTypes.COOKIES; |
| 694 var categorySubtype = settings.PermissionValues.ALLOW; | 717 var categorySubtype = settings.PermissionValues.ALLOW; |
| 695 setUpCategory(contentType, categorySubtype, prefsIncognito); | 718 setUpCategory(contentType, categorySubtype, prefsIncognito); |
| 696 return browserProxy.whenCalled('getExceptionList') | 719 return browserProxy.whenCalled('getExceptionList') |
| (...skipping 17 matching lines...) Expand all Loading... |
| 714 | 737 |
| 715 // Select 'Remove' from menu on 'foo.com'. | 738 // Select 'Remove' from menu on 'foo.com'. |
| 716 openActionMenu(1); | 739 openActionMenu(1); |
| 717 var remove = testElement.$.reset; | 740 var remove = testElement.$.reset; |
| 718 assertTrue(!!remove); | 741 assertTrue(!!remove); |
| 719 MockInteractions.tap(remove); | 742 MockInteractions.tap(remove); |
| 720 return browserProxy.whenCalled('resetCategoryPermissionForOrigin'); | 743 return browserProxy.whenCalled('resetCategoryPermissionForOrigin'); |
| 721 }) | 744 }) |
| 722 .then(function(args) { | 745 .then(function(args) { |
| 723 assertEquals('http://foo.com', args[0]); | 746 assertEquals('http://foo.com', args[0]); |
| 724 assertEquals('http://foo.com', args[1]); | 747 assertEquals('', args[1]); |
| 725 assertEquals(contentType, args[2]); | 748 assertEquals(contentType, args[2]); |
| 726 assertTrue(args[3]); // Incognito. | 749 assertTrue(args[3]); // Incognito. |
| 727 }); | 750 }); |
| 728 }); | 751 }); |
| 729 | 752 |
| 730 test('reset button works for read-only content types', function() { | 753 test('reset button works for read-only content types', function() { |
| 731 testElement.readOnlyList = true; | 754 testElement.readOnlyList = true; |
| 732 Polymer.dom.flush(); | 755 Polymer.dom.flush(); |
| 733 | 756 |
| 734 var contentType = settings.ContentSettingsTypes.GEOLOCATION; | 757 var contentType = settings.ContentSettingsTypes.GEOLOCATION; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 756 // Assert reset button is visible. | 779 // Assert reset button is visible. |
| 757 var resetButton = item.querySelector('#resetSite'); | 780 var resetButton = item.querySelector('#resetSite'); |
| 758 assertTrue(!!resetButton); | 781 assertTrue(!!resetButton); |
| 759 assertFalse(resetButton.hidden); | 782 assertFalse(resetButton.hidden); |
| 760 | 783 |
| 761 MockInteractions.tap(resetButton); | 784 MockInteractions.tap(resetButton); |
| 762 return browserProxy.whenCalled('resetCategoryPermissionForOrigin'); | 785 return browserProxy.whenCalled('resetCategoryPermissionForOrigin'); |
| 763 }) | 786 }) |
| 764 .then(function(args) { | 787 .then(function(args) { |
| 765 assertEquals('https://foo-allow.com:443', args[0]); | 788 assertEquals('https://foo-allow.com:443', args[0]); |
| 766 assertEquals('https://foo-allow.com:443', args[1]); | 789 assertEquals('', args[1]); |
| 767 assertEquals(contentType, args[2]); | 790 assertEquals(contentType, args[2]); |
| 768 }); | 791 }); |
| 769 }); | 792 }); |
| 770 | 793 |
| 771 test('edit action menu opens edit exception dialog', function() { | 794 test('edit action menu opens edit exception dialog', function() { |
| 772 setUpCategory( | 795 setUpCategory( |
| 773 settings.ContentSettingsTypes.COOKIES, | 796 settings.ContentSettingsTypes.COOKIES, |
| 774 settings.PermissionValues.SESSION_ONLY, prefsSessionOnly); | 797 settings.PermissionValues.SESSION_ONLY, prefsSessionOnly); |
| 775 | 798 |
| 776 return browserProxy.whenCalled('getExceptionList').then(function() { | 799 return browserProxy.whenCalled('getExceptionList').then(function() { |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1005 MockInteractions.tap(clickable); | 1028 MockInteractions.tap(clickable); |
| 1006 if (testElement.sites.length == 1) { | 1029 if (testElement.sites.length == 1) { |
| 1007 assertEquals( | 1030 assertEquals( |
| 1008 prefsMixedOriginAndPattern.exceptions.geolocation[0].origin, | 1031 prefsMixedOriginAndPattern.exceptions.geolocation[0].origin, |
| 1009 testElement.sites[0].displayName); | 1032 testElement.sites[0].displayName); |
| 1010 } | 1033 } |
| 1011 }); | 1034 }); |
| 1012 }); | 1035 }); |
| 1013 }); | 1036 }); |
| 1014 | 1037 |
| 1038 test('Mixed embeddingOrigin', function() { |
| 1039 setUpCategory( |
| 1040 settings.ContentSettingsTypes.IMAGES, settings.PermissionValues.ALLOW, |
| 1041 prefsMixedEmbeddingOrigin); |
| 1042 return browserProxy.whenCalled('getExceptionList') |
| 1043 .then(function(contentType) { |
| 1044 // Required for firstItem to be found below. |
| 1045 Polymer.dom.flush(); |
| 1046 // Validate that embeddingOrigin sites cannot be edited. |
| 1047 var firstItem = testElement.$.listContainer.children[0]; |
| 1048 assertTrue(firstItem.querySelector('#actionMenuButton').hidden); |
| 1049 assertFalse(firstItem.querySelector('#resetSite').hidden); |
| 1050 // Validate that non-embeddingOrigin sites can be edited. |
| 1051 var secondItem = testElement.$.listContainer.children[1]; |
| 1052 assertFalse(secondItem.querySelector('#actionMenuButton').hidden); |
| 1053 assertTrue(secondItem.querySelector('#resetSite').hidden); |
| 1054 }); |
| 1055 }); |
| 1056 |
| 1015 test('Mixed schemes (present and absent)', function() { | 1057 test('Mixed schemes (present and absent)', function() { |
| 1016 // Prefs: One item with scheme and one without. | 1058 // Prefs: One item with scheme and one without. |
| 1017 setUpCategory( | 1059 setUpCategory( |
| 1018 settings.ContentSettingsTypes.GEOLOCATION, | 1060 settings.ContentSettingsTypes.GEOLOCATION, |
| 1019 settings.PermissionValues.ALLOW, prefsMixedSchemes); | 1061 settings.PermissionValues.ALLOW, prefsMixedSchemes); |
| 1020 return browserProxy.whenCalled('getExceptionList') | 1062 return browserProxy.whenCalled('getExceptionList') |
| 1021 .then(function(contentType) { | 1063 .then(function(contentType) { |
| 1022 // No further checks needed. If this fails, it will hang the test. | 1064 // No further checks needed. If this fails, it will hang the test. |
| 1023 }); | 1065 }); |
| 1024 }); | 1066 }); |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 input.value = expectedPattern; | 1247 input.value = expectedPattern; |
| 1206 input.fire('input'); | 1248 input.fire('input'); |
| 1207 | 1249 |
| 1208 return browserProxy.whenCalled('isPatternValid').then(function(pattern) { | 1250 return browserProxy.whenCalled('isPatternValid').then(function(pattern) { |
| 1209 assertEquals(expectedPattern, pattern); | 1251 assertEquals(expectedPattern, pattern); |
| 1210 assertTrue(actionButton.disabled); | 1252 assertTrue(actionButton.disabled); |
| 1211 assertTrue(input.invalid); | 1253 assertTrue(input.invalid); |
| 1212 }); | 1254 }); |
| 1213 }); | 1255 }); |
| 1214 }); | 1256 }); |
| OLD | NEW |