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 NavigateInCurrentTabCallback() { | 5 function NavigateCallback() { |
raymes
2016/09/06 04:36:07
We would make this into a MockNavigatorDelegate cl
jaepark
2016/09/06 20:32:47
Done.
| |
6 this.navigateCalled = false; | 6 this.navigateCalled = false; |
7 this.url = undefined; | 7 this.url = undefined; |
8 this.callback = function(url) { | 8 this.callback = function(url) { |
9 this.navigateCalled = true; | |
10 this.url = url; | |
11 }.bind(this); | |
12 this.reset = function() { | |
13 this.navigateCalled = false; | |
14 this.url = undefined; | |
15 }; | |
16 } | |
17 | |
18 function NavigateInNewTabCallback() { | |
19 this.navigateCalled = false; | |
20 this.url = undefined; | |
21 this.callback = function(url) { | |
22 this.navigateCalled = true; | 9 this.navigateCalled = true; |
23 this.url = url; | 10 this.url = url; |
24 }.bind(this); | 11 }.bind(this); |
25 this.reset = function() { | 12 this.reset = function() { |
26 this.navigateCalled = false; | 13 this.navigateCalled = false; |
27 this.url = undefined; | 14 this.url = undefined; |
28 }; | 15 }; |
29 } | 16 } |
30 | 17 |
31 /** | 18 /** |
32 * Given a |navigator|, navigate to |url| in the current tab or new tab, | 19 * Given a |navigator|, navigate to |url| in the current tab, a new tab, or |
33 * depending on the value of |openInNewTab|. Use |viewportChangedCallback| | 20 * a new window depending on the value of |disposition|. |
34 * and |navigateCallback| to check the callbacks, and that the navigation | 21 * Use |viewportChangedCallback| and |navigateCallback| to check the callbacks, |
35 * to |expectedResultUrl| happened. | 22 * and that the navigation to |expectedResultUrl| happened. |
36 */ | 23 */ |
37 function doNavigationUrlTest( | 24 function doNavigationUrlTest( |
38 navigator, | 25 navigator, |
39 url, | 26 url, |
40 disposition, | 27 disposition, |
41 expectedResultUrl, | 28 expectedResultUrl, |
42 viewportChangedCallback, | 29 viewportChangedCallback, |
43 navigateCallback) { | 30 navigateCallback) { |
44 viewportChangedCallback.reset(); | 31 viewportChangedCallback.reset(); |
45 navigateCallback.reset(); | 32 navigateCallback.reset(); |
46 navigator.navigate(url, disposition); | 33 navigator.navigate(url, disposition); |
47 chrome.test.assertFalse(viewportChangedCallback.wasCalled); | 34 chrome.test.assertFalse(viewportChangedCallback.wasCalled); |
48 chrome.test.assertTrue(navigateCallback.navigateCalled); | 35 chrome.test.assertTrue(navigateCallback.navigateCalled); |
49 chrome.test.assertEq(expectedResultUrl, navigateCallback.url); | 36 chrome.test.assertEq(expectedResultUrl, navigateCallback.url); |
50 } | 37 } |
51 | 38 |
52 /** | 39 /** |
53 * Helper function to run doNavigationUrlTest() for the current tab and a new | 40 * Helper function to run doNavigationUrlTest() for the current tab, a new |
54 * tab. | 41 * tab, and a new window. |
55 */ | 42 */ |
56 function doNavigationUrlTestInCurrentTabAndNewTab( | 43 function doNavigationUrlTests(originalUrl, url, expectedResultUrl) { |
57 navigator, | 44 var mockWindow = new MockWindow(100, 100); |
58 url, | 45 var mockSizer = new MockSizer(); |
59 expectedResultUrl, | 46 var mockViewportChangedCallback = new MockViewportChangedCallback(); |
60 viewportChangedCallback, | 47 var viewport = new Viewport(mockWindow, mockSizer, |
61 navigateInCurrentTabCallback, | 48 mockViewportChangedCallback.callback, |
62 navigateInNewTabCallback) { | 49 function() {}, function() {}, 0, 1, 0); |
50 | |
51 var paramsParser = new OpenPDFParamsParser(function(name) { | |
52 paramsParser.onNamedDestinationReceived(-1); | |
53 }); | |
54 | |
55 var navigateInCurrentTabCallback = new NavigateCallback(); | |
56 var navigateInNewTabCallback = new NavigateCallback(); | |
57 var navigateInNewWindowCallback = new NavigateCallback(); | |
58 | |
59 var navigateCallback = { | |
60 currentTabCallback: navigateInCurrentTabCallback.callback, | |
61 newTabCallback: navigateInNewTabCallback.callback, | |
62 newWindowCallback: navigateInNewWindowCallback.callback | |
63 }; | |
64 var navigator = new Navigator(originalUrl, viewport, paramsParser, | |
65 navigateCallback); | |
raymes
2016/09/06 04:36:07
We could just pass in a new MockNavigatorDelegate
jaepark
2016/09/06 20:32:47
Done.
| |
66 | |
63 doNavigationUrlTest(navigator, url, | 67 doNavigationUrlTest(navigator, url, |
64 Navigator.WindowOpenDisposition.CURRENT_TAB, expectedResultUrl, | 68 Navigator.WindowOpenDisposition.CURRENT_TAB, expectedResultUrl, |
65 viewportChangedCallback, navigateInCurrentTabCallback); | 69 mockViewportChangedCallback, navigateInCurrentTabCallback); |
raymes
2016/09/06 04:36:07
We could pass in the appropriate state of the Mock
jaepark
2016/09/06 20:32:47
Done.
| |
66 doNavigationUrlTest(navigator, url, | 70 doNavigationUrlTest(navigator, url, |
67 Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB, expectedResultUrl, | 71 Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB, expectedResultUrl, |
68 viewportChangedCallback, navigateInNewTabCallback); | 72 mockViewportChangedCallback, navigateInNewTabCallback); |
73 doNavigationUrlTest(navigator, url, | |
74 Navigator.WindowOpenDisposition.NEW_WINDOW, expectedResultUrl, | |
75 mockViewportChangedCallback, navigateInNewWindowCallback); | |
69 } | 76 } |
70 | 77 |
71 var tests = [ | 78 var tests = [ |
72 /** | 79 /** |
73 * Test navigation within the page, opening a url in the same tab and | 80 * Test navigation within the page, opening a url in the same tab and |
74 * opening a url in a new tab. | 81 * opening a url in a new tab. |
75 */ | 82 */ |
76 function testNavigate() { | 83 function testNavigate() { |
77 var mockWindow = new MockWindow(100, 100); | 84 var mockWindow = new MockWindow(100, 100); |
78 var mockSizer = new MockSizer(); | 85 var mockSizer = new MockSizer(); |
79 var mockCallback = new MockViewportChangedCallback(); | 86 var mockCallback = new MockViewportChangedCallback(); |
80 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 87 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
81 function() {}, function() {}, 0, 1, 0); | 88 function() {}, function() {}, 0, 1, 0); |
82 | 89 |
83 var paramsParser = new OpenPDFParamsParser(function(name) { | 90 var paramsParser = new OpenPDFParamsParser(function(name) { |
84 if (name == 'US') | 91 if (name == 'US') |
85 paramsParser.onNamedDestinationReceived(0); | 92 paramsParser.onNamedDestinationReceived(0); |
86 else if (name == 'UY') | 93 else if (name == 'UY') |
87 paramsParser.onNamedDestinationReceived(2); | 94 paramsParser.onNamedDestinationReceived(2); |
88 else | 95 else |
89 paramsParser.onNamedDestinationReceived(-1); | 96 paramsParser.onNamedDestinationReceived(-1); |
90 }); | 97 }); |
91 var url = "http://xyz.pdf"; | 98 var url = "http://xyz.pdf"; |
92 | 99 |
93 var navigateInCurrentTabCallback = new NavigateInCurrentTabCallback(); | 100 var navigateInCurrentTabCallback = new NavigateCallback(); |
94 var navigateInNewTabCallback = new NavigateInNewTabCallback(); | 101 var navigateInNewTabCallback = new NavigateCallback(); |
102 var navigateInNewWindowCallback = new NavigateCallback(); | |
103 | |
104 var navigateCallback = { | |
105 currentTabCallback: navigateInCurrentTabCallback.callback, | |
106 newTabCallback: navigateInNewTabCallback.callback, | |
107 newWindowCallback: navigateInNewWindowCallback.callback | |
108 }; | |
95 var navigator = new Navigator(url, viewport, paramsParser, | 109 var navigator = new Navigator(url, viewport, paramsParser, |
96 navigateInCurrentTabCallback.callback, | 110 navigateCallback); |
97 navigateInNewTabCallback.callback); | |
98 | 111 |
99 var documentDimensions = new MockDocumentDimensions(); | 112 var documentDimensions = new MockDocumentDimensions(); |
100 documentDimensions.addPage(100, 100); | 113 documentDimensions.addPage(100, 100); |
101 documentDimensions.addPage(200, 200); | 114 documentDimensions.addPage(200, 200); |
102 documentDimensions.addPage(100, 400); | 115 documentDimensions.addPage(100, 400); |
103 viewport.setDocumentDimensions(documentDimensions); | 116 viewport.setDocumentDimensions(documentDimensions); |
104 viewport.setZoom(1); | 117 viewport.setZoom(1); |
105 | 118 |
106 mockCallback.reset(); | 119 mockCallback.reset(); |
107 // This should move viewport to page 0. | 120 // This should move viewport to page 0. |
(...skipping 30 matching lines...) Expand all Loading... | |
138 navigator.navigate(url + "#ABC", | 151 navigator.navigate(url + "#ABC", |
139 Navigator.WindowOpenDisposition.CURRENT_TAB); | 152 Navigator.WindowOpenDisposition.CURRENT_TAB); |
140 chrome.test.assertFalse(mockCallback.wasCalled); | 153 chrome.test.assertFalse(mockCallback.wasCalled); |
141 chrome.test.assertTrue(navigateInCurrentTabCallback.navigateCalled); | 154 chrome.test.assertTrue(navigateInCurrentTabCallback.navigateCalled); |
142 chrome.test.assertEq(0, viewport.position.x); | 155 chrome.test.assertEq(0, viewport.position.x); |
143 chrome.test.assertEq(300, viewport.position.y); | 156 chrome.test.assertEq(300, viewport.position.y); |
144 | 157 |
145 chrome.test.succeed(); | 158 chrome.test.succeed(); |
146 }, | 159 }, |
147 /** | 160 /** |
148 * Test opening a url in the same tab and opening a url in a new tab for | 161 * Test opening a url in the same tab, in a new tab, and in a new window for |
149 * a http:// url as the current location. The destination url may not have | 162 * a http:// url as the current location. The destination url may not have |
150 * a valid scheme, so the navigator must determine the url by following | 163 * a valid scheme, so the navigator must determine the url by following |
151 * similar heuristics as Adobe Acrobat Reader. | 164 * similar heuristics as Adobe Acrobat Reader. |
152 */ | 165 */ |
153 function testNavigateForLinksWithoutScheme() { | 166 function testNavigateForLinksWithoutScheme() { |
154 var mockWindow = new MockWindow(100, 100); | |
155 var mockSizer = new MockSizer(); | |
156 var mockCallback = new MockViewportChangedCallback(); | |
157 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | |
158 function() {}, function() {}, 0, 1, 0); | |
159 | |
160 var paramsParser = new OpenPDFParamsParser(function(name) { | |
161 paramsParser.onNamedDestinationReceived(-1); | |
162 }); | |
163 var url = "http://www.example.com/subdir/xyz.pdf"; | 167 var url = "http://www.example.com/subdir/xyz.pdf"; |
164 | 168 |
165 var navigateInCurrentTabCallback = new NavigateInCurrentTabCallback(); | |
166 var navigateInNewTabCallback = new NavigateInNewTabCallback(); | |
167 var navigator = new Navigator(url, viewport, paramsParser, | |
168 navigateInCurrentTabCallback.callback, | |
169 navigateInNewTabCallback.callback); | |
170 | |
171 // Sanity check. | 169 // Sanity check. |
172 doNavigationUrlTestInCurrentTabAndNewTab( | 170 doNavigationUrlTests( |
173 navigator, | 171 url, |
174 'https://www.foo.com/bar.pdf', | 172 'https://www.foo.com/bar.pdf', |
175 'https://www.foo.com/bar.pdf', | 173 'https://www.foo.com/bar.pdf'); |
176 mockCallback, | |
177 navigateInCurrentTabCallback, | |
178 navigateInNewTabCallback); | |
179 | 174 |
180 // Open relative links. | 175 // Open relative links. |
181 doNavigationUrlTestInCurrentTabAndNewTab( | 176 doNavigationUrlTests( |
182 navigator, | 177 url, |
183 'foo/bar.pdf', | 178 'foo/bar.pdf', |
184 'http://www.example.com/subdir/foo/bar.pdf', | 179 'http://www.example.com/subdir/foo/bar.pdf'); |
185 mockCallback, | 180 doNavigationUrlTests( |
186 navigateInCurrentTabCallback, | 181 url, |
187 navigateInNewTabCallback); | |
188 doNavigationUrlTestInCurrentTabAndNewTab( | |
189 navigator, | |
190 'foo.com/bar.pdf', | 182 'foo.com/bar.pdf', |
191 'http://www.example.com/subdir/foo.com/bar.pdf', | 183 'http://www.example.com/subdir/foo.com/bar.pdf'); |
192 mockCallback, | |
193 navigateInCurrentTabCallback, | |
194 navigateInNewTabCallback); | |
195 // The expected result is not normalized here. | 184 // The expected result is not normalized here. |
196 doNavigationUrlTestInCurrentTabAndNewTab( | 185 doNavigationUrlTests( |
197 navigator, | 186 url, |
198 '../www.foo.com/bar.pdf', | 187 '../www.foo.com/bar.pdf', |
199 'http://www.example.com/subdir/../www.foo.com/bar.pdf', | 188 'http://www.example.com/subdir/../www.foo.com/bar.pdf'); |
200 mockCallback, | |
201 navigateInCurrentTabCallback, | |
202 navigateInNewTabCallback); | |
203 | 189 |
204 // Open an absolute link. | 190 // Open an absolute link. |
205 doNavigationUrlTestInCurrentTabAndNewTab( | 191 doNavigationUrlTests( |
206 navigator, | 192 url, |
207 '/foodotcom/bar.pdf', | 193 '/foodotcom/bar.pdf', |
208 'http://www.example.com/foodotcom/bar.pdf', | 194 'http://www.example.com/foodotcom/bar.pdf'); |
209 mockCallback, | |
210 navigateInCurrentTabCallback, | |
211 navigateInNewTabCallback); | |
212 | 195 |
213 // Open a http url without a scheme. | 196 // Open a http url without a scheme. |
214 doNavigationUrlTestInCurrentTabAndNewTab( | 197 doNavigationUrlTests( |
215 navigator, | 198 url, |
216 'www.foo.com/bar.pdf', | 199 'www.foo.com/bar.pdf', |
217 'http://www.foo.com/bar.pdf', | 200 'http://www.foo.com/bar.pdf'); |
218 mockCallback, | |
219 navigateInCurrentTabCallback, | |
220 navigateInNewTabCallback); | |
221 | 201 |
222 // Test three dots. | 202 // Test three dots. |
223 doNavigationUrlTestInCurrentTabAndNewTab( | 203 doNavigationUrlTests( |
224 navigator, | 204 url, |
225 '.../bar.pdf', | 205 '.../bar.pdf', |
226 'http://www.example.com/subdir/.../bar.pdf', | 206 'http://www.example.com/subdir/.../bar.pdf'); |
227 mockCallback, | |
228 navigateInCurrentTabCallback, | |
229 navigateInNewTabCallback); | |
230 | 207 |
231 // Test forward slashes. | 208 // Test forward slashes. |
232 doNavigationUrlTestInCurrentTabAndNewTab( | 209 doNavigationUrlTests( |
233 navigator, | 210 url, |
234 '..\\bar.pdf', | 211 '..\\bar.pdf', |
235 'http://www.example.com/subdir/..\\bar.pdf', | 212 'http://www.example.com/subdir/..\\bar.pdf'); |
236 mockCallback, | 213 doNavigationUrlTests( |
237 navigateInCurrentTabCallback, | 214 url, |
238 navigateInNewTabCallback); | |
239 doNavigationUrlTestInCurrentTabAndNewTab( | |
240 navigator, | |
241 '.\\bar.pdf', | 215 '.\\bar.pdf', |
242 'http://www.example.com/subdir/.\\bar.pdf', | 216 'http://www.example.com/subdir/.\\bar.pdf'); |
243 mockCallback, | 217 doNavigationUrlTests( |
244 navigateInCurrentTabCallback, | 218 url, |
245 navigateInNewTabCallback); | |
246 doNavigationUrlTestInCurrentTabAndNewTab( | |
247 navigator, | |
248 '\\bar.pdf', | 219 '\\bar.pdf', |
249 'http://www.example.com/subdir/\\bar.pdf', | 220 'http://www.example.com/subdir/\\bar.pdf'); |
250 mockCallback, | |
251 navigateInCurrentTabCallback, | |
252 navigateInNewTabCallback); | |
253 | 221 |
254 // Regression test for https://crbug.com/569040 | 222 // Regression test for https://crbug.com/569040 |
255 doNavigationUrlTestInCurrentTabAndNewTab( | 223 doNavigationUrlTests( |
256 navigator, | 224 url, |
257 'http://something.else/foo#page=5', | 225 'http://something.else/foo#page=5', |
258 'http://something.else/foo#page=5', | 226 'http://something.else/foo#page=5'); |
259 mockCallback, | |
260 navigateInCurrentTabCallback, | |
261 navigateInNewTabCallback); | |
262 | 227 |
263 chrome.test.succeed(); | 228 chrome.test.succeed(); |
264 }, | 229 }, |
265 /** | 230 /** |
266 * Test opening a url in the same tab and opening a url in a new tab with a | 231 * Test opening a url in the same tab, in a new tab, and in a new window with |
267 * file:/// url as the current location. | 232 * a file:/// url as the current location. |
268 */ | 233 */ |
269 function testNavigateFromLocalFile() { | 234 function testNavigateFromLocalFile() { |
270 var mockWindow = new MockWindow(100, 100); | |
271 var mockSizer = new MockSizer(); | |
272 var mockCallback = new MockViewportChangedCallback(); | |
273 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | |
274 function() {}, function() {}, 0, 1, 0); | |
275 | |
276 var paramsParser = new OpenPDFParamsParser(function(name) { | |
277 paramsParser.onNamedDestinationReceived(-1); | |
278 }); | |
279 var url = "file:///some/path/to/myfile.pdf"; | 235 var url = "file:///some/path/to/myfile.pdf"; |
280 | 236 |
281 var navigateInCurrentTabCallback = new NavigateInCurrentTabCallback(); | |
282 var navigateInNewTabCallback = new NavigateInNewTabCallback(); | |
283 var navigator = new Navigator(url, viewport, paramsParser, | |
284 navigateInCurrentTabCallback.callback, | |
285 navigateInNewTabCallback.callback); | |
286 | |
287 // Open an absolute link. | 237 // Open an absolute link. |
288 doNavigationUrlTestInCurrentTabAndNewTab( | 238 doNavigationUrlTests( |
289 navigator, | 239 url, |
290 '/foodotcom/bar.pdf', | 240 '/foodotcom/bar.pdf', |
291 'file:///foodotcom/bar.pdf', | 241 'file:///foodotcom/bar.pdf'); |
292 mockCallback, | |
293 navigateInCurrentTabCallback, | |
294 navigateInNewTabCallback); | |
295 | 242 |
296 chrome.test.succeed(); | 243 chrome.test.succeed(); |
297 } | 244 } |
298 ]; | 245 ]; |
299 | 246 |
300 var scriptingAPI = new PDFScriptingAPI(window, window); | 247 var scriptingAPI = new PDFScriptingAPI(window, window); |
301 scriptingAPI.setLoadCallback(function() { | 248 scriptingAPI.setLoadCallback(function() { |
302 chrome.test.runTests(tests); | 249 chrome.test.runTests(tests); |
303 }); | 250 }); |
OLD | NEW |