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 function MockNavigatorDelegate() { | 5 function MockNavigatorDelegate() { |
6 this.navigateInCurrentTabCalled = false; | 6 this.navigateInCurrentTabCalled = false; |
7 this.navigateInNewTabCalled = false; | 7 this.navigateInNewTabCalled = false; |
8 this.navigateInNewWindowCalled = false; | 8 this.navigateInNewWindowCalled = false; |
9 this.url = undefined; | 9 this.url = undefined; |
10 } | 10 } |
11 | 11 |
12 MockNavigatorDelegate.prototype = { | 12 MockNavigatorDelegate.prototype = { |
13 navigateInCurrentTab: function(url) { | 13 navigateInCurrentTab: function(url) { |
14 this.navigateInCurrentTabCalled = true; | 14 this.navigateInCurrentTabCalled = true; |
15 this.url = url; | 15 this.url = url || '<called, but no url set>'; |
16 }, | 16 }, |
17 navigateInNewTab: function(url) { | 17 navigateInNewTab: function(url) { |
18 this.navigateInNewTabCalled = true; | 18 this.navigateInNewTabCalled = true; |
19 this.url = url; | 19 this.url = url || '<called, but no url set>'; |
20 | 20 |
21 }, | 21 }, |
22 navigateInNewWindow: function(url) { | 22 navigateInNewWindow: function(url) { |
23 this.navigateInNewWindowCalled = true; | 23 this.navigateInNewWindowCalled = true; |
24 this.url = url; | 24 this.url = url || '<called, but no url set>'; |
25 }, | 25 }, |
26 reset: function() { | 26 reset: function() { |
27 this.navigateInCurrentTabCalled = false; | 27 this.navigateInCurrentTabCalled = false; |
28 this.navigateInNewTabCalled = false; | 28 this.navigateInNewTabCalled = false; |
29 this.navigateInNewWindowCalled = false; | 29 this.navigateInNewWindowCalled = false; |
30 this.url = undefined; | 30 this.url = undefined; |
31 } | 31 } |
32 } | 32 } |
33 | 33 |
34 /** | 34 /** |
35 * Given a |navigator|, navigate to |url| in the current tab, a new tab, or | 35 * Given a |navigator|, navigate to |url| in the current tab, a new tab, or |
36 * a new window depending on the value of |disposition|. Use | 36 * a new window depending on the value of |disposition|. Use |
37 * |viewportChangedCallback| and |navigatorDelegate| to check the callbacks, | 37 * |viewportChangedCallback| and |navigatorDelegate| to check the callbacks, |
38 * and that the navigation to |expectedResultUrl| happened. | 38 * and that the navigation to |expectedResultUrl| happened. |
39 */ | 39 */ |
40 function doNavigationUrlTest( | 40 function doNavigationUrlTest( |
41 navigator, | 41 navigator, |
42 url, | 42 url, |
43 disposition, | 43 disposition, |
44 expectedResultUrl, | 44 expectedResultUrl, |
45 viewportChangedCallback, | 45 viewportChangedCallback, |
46 navigatorDelegate) { | 46 navigatorDelegate) { |
47 viewportChangedCallback.reset(); | 47 viewportChangedCallback.reset(); |
48 navigatorDelegate.reset(); | 48 navigatorDelegate.reset(); |
49 navigator.navigate(url, disposition); | 49 navigator.navigate(url, disposition); |
50 chrome.test.assertFalse(viewportChangedCallback.wasCalled); | 50 chrome.test.assertFalse(viewportChangedCallback.wasCalled); |
| 51 chrome.test.assertEq(expectedResultUrl, navigatorDelegate.url); |
| 52 if (expectedResultUrl === undefined) { |
| 53 return; |
| 54 } |
51 switch (disposition) { | 55 switch (disposition) { |
52 case Navigator.WindowOpenDisposition.CURRENT_TAB: | 56 case Navigator.WindowOpenDisposition.CURRENT_TAB: |
53 chrome.test.assertTrue(navigatorDelegate.navigateInCurrentTabCalled); | 57 chrome.test.assertTrue(navigatorDelegate.navigateInCurrentTabCalled); |
54 break; | 58 break; |
55 case Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB: | 59 case Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB: |
56 chrome.test.assertTrue(navigatorDelegate.navigateInNewTabCalled); | 60 chrome.test.assertTrue(navigatorDelegate.navigateInNewTabCalled); |
57 break; | 61 break; |
58 case Navigator.WindowOpenDisposition.NEW_WINDOW: | 62 case Navigator.WindowOpenDisposition.NEW_WINDOW: |
59 chrome.test.assertTrue(navigatorDelegate.navigateInNewWindowCalled); | 63 chrome.test.assertTrue(navigatorDelegate.navigateInNewWindowCalled); |
60 break; | 64 break; |
61 default: | 65 default: |
62 break; | 66 break; |
63 } | 67 } |
64 chrome.test.assertEq(expectedResultUrl, navigatorDelegate.url); | |
65 } | 68 } |
66 | 69 |
67 /** | 70 /** |
68 * Helper function to run doNavigationUrlTest() for the current tab, a new | 71 * Helper function to run doNavigationUrlTest() for the current tab, a new |
69 * tab, and a new window. | 72 * tab, and a new window. |
70 */ | 73 */ |
71 function doNavigationUrlTests(originalUrl, url, expectedResultUrl) { | 74 function doNavigationUrlTests(originalUrl, url, expectedResultUrl) { |
72 var mockWindow = new MockWindow(100, 100); | 75 var mockWindow = new MockWindow(100, 100); |
73 var mockSizer = new MockSizer(); | 76 var mockSizer = new MockSizer(); |
74 var mockViewportChangedCallback = new MockViewportChangedCallback(); | 77 var mockViewportChangedCallback = new MockViewportChangedCallback(); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 function testNavigateFromLocalFile() { | 249 function testNavigateFromLocalFile() { |
247 var url = "file:///some/path/to/myfile.pdf"; | 250 var url = "file:///some/path/to/myfile.pdf"; |
248 | 251 |
249 // Open an absolute link. | 252 // Open an absolute link. |
250 doNavigationUrlTests( | 253 doNavigationUrlTests( |
251 url, | 254 url, |
252 '/foodotcom/bar.pdf', | 255 '/foodotcom/bar.pdf', |
253 'file:///foodotcom/bar.pdf'); | 256 'file:///foodotcom/bar.pdf'); |
254 | 257 |
255 chrome.test.succeed(); | 258 chrome.test.succeed(); |
| 259 }, |
| 260 |
| 261 function testNavigateInvalidUrls() { |
| 262 var url = 'https://example.com/some-web-document.pdf'; |
| 263 |
| 264 // From non-file: to file: |
| 265 doNavigationUrlTests( |
| 266 url, |
| 267 'file:///bar.pdf', |
| 268 undefined); |
| 269 |
| 270 doNavigationUrlTests( |
| 271 url, |
| 272 'chrome://version', |
| 273 undefined); |
| 274 |
| 275 doNavigationUrlTests( |
| 276 url, |
| 277 'javascript:// this is not a document.pdf', |
| 278 undefined); |
| 279 |
| 280 doNavigationUrlTests( |
| 281 url, |
| 282 'this-is-not-a-valid-scheme://path.pdf', |
| 283 undefined); |
| 284 |
| 285 doNavigationUrlTests( |
| 286 url, |
| 287 '', |
| 288 undefined); |
| 289 |
| 290 chrome.test.succeed(); |
256 } | 291 } |
257 ]; | 292 ]; |
258 | 293 |
259 var scriptingAPI = new PDFScriptingAPI(window, window); | 294 var scriptingAPI = new PDFScriptingAPI(window, window); |
260 scriptingAPI.setLoadCallback(function() { | 295 scriptingAPI.setLoadCallback(function() { |
261 chrome.test.runTests(tests); | 296 chrome.test.runTests(tests); |
262 }); | 297 }); |
OLD | NEW |