OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
10 #include "base/files/file_enumerator.h" | 10 #include "base/files/file_enumerator.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 #include "extensions/test/result_catcher.h" | 54 #include "extensions/test/result_catcher.h" |
55 #include "net/dns/mock_host_resolver.h" | 55 #include "net/dns/mock_host_resolver.h" |
56 #include "net/test/embedded_test_server/embedded_test_server.h" | 56 #include "net/test/embedded_test_server/embedded_test_server.h" |
57 #include "ui/base/resource/resource_bundle.h" | 57 #include "ui/base/resource/resource_bundle.h" |
58 #include "url/gurl.h" | 58 #include "url/gurl.h" |
59 | 59 |
60 #if defined(TOOLKIT_VIEWS) && !defined(OS_MACOSX) | 60 #if defined(TOOLKIT_VIEWS) && !defined(OS_MACOSX) |
61 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" | 61 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" |
62 #endif | 62 #endif |
63 | 63 |
| 64 using content::WebContents; |
| 65 |
64 const int kNumberLoadTestParts = 10; | 66 const int kNumberLoadTestParts = 10; |
65 | 67 |
66 #if defined(OS_MACOSX) | 68 #if defined(OS_MACOSX) |
67 const int kDefaultKeyModifier = blink::WebInputEvent::MetaKey; | 69 const int kDefaultKeyModifier = blink::WebInputEvent::MetaKey; |
68 #else | 70 #else |
69 const int kDefaultKeyModifier = blink::WebInputEvent::ControlKey; | 71 const int kDefaultKeyModifier = blink::WebInputEvent::ControlKey; |
70 #endif | 72 #endif |
71 | 73 |
72 // Using ASSERT_TRUE deliberately instead of ASSERT_EQ or ASSERT_STREQ | 74 // Using ASSERT_TRUE deliberately instead of ASSERT_EQ or ASSERT_STREQ |
73 // in order to print a more readable message if the strings differ. | 75 // in order to print a more readable message if the strings differ. |
74 #define ASSERT_MULTILINE_STREQ(expected, actual) \ | 76 #define ASSERT_MULTILINE_STREQ(expected, actual) \ |
75 ASSERT_TRUE(expected == actual) \ | 77 ASSERT_TRUE(expected == actual) \ |
76 << "Expected:\n" << expected \ | 78 << "Expected:\n" << expected \ |
77 << "\n\nActual:\n" << actual | 79 << "\n\nActual:\n" << actual |
78 | 80 |
79 bool GetGuestCallback(content::WebContents** guest_out, | 81 bool GetGuestCallback(WebContents** guest_out, WebContents* guest) { |
80 content::WebContents* guest) { | |
81 EXPECT_FALSE(*guest_out); | 82 EXPECT_FALSE(*guest_out); |
82 *guest_out = guest; | 83 *guest_out = guest; |
83 // Return false so that we iterate through all the guests and verify there is | 84 // Return false so that we iterate through all the guests and verify there is |
84 // only one. | 85 // only one. |
85 return false; | 86 return false; |
86 } | 87 } |
87 | 88 |
88 class PDFExtensionTest : public ExtensionApiTest, | 89 class PDFExtensionTest : public ExtensionApiTest, |
89 public testing::WithParamInterface<int> { | 90 public testing::WithParamInterface<int> { |
90 public: | 91 public: |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 const std::string& pdf_filename) { | 130 const std::string& pdf_filename) { |
130 extensions::ResultCatcher catcher; | 131 extensions::ResultCatcher catcher; |
131 | 132 |
132 GURL url(embedded_test_server()->GetURL("/pdf/" + pdf_filename)); | 133 GURL url(embedded_test_server()->GetURL("/pdf/" + pdf_filename)); |
133 | 134 |
134 // It should be good enough to just navigate to the URL. But loading up the | 135 // It should be good enough to just navigate to the URL. But loading up the |
135 // BrowserPluginGuest seems to happen asynchronously as there was flakiness | 136 // BrowserPluginGuest seems to happen asynchronously as there was flakiness |
136 // being seen due to the BrowserPluginGuest not being available yet (see | 137 // being seen due to the BrowserPluginGuest not being available yet (see |
137 // crbug.com/498077). So instead use |LoadPdf| which ensures that the PDF is | 138 // crbug.com/498077). So instead use |LoadPdf| which ensures that the PDF is |
138 // loaded before continuing. | 139 // loaded before continuing. |
139 content::WebContents* guest_contents = LoadPdfGetGuestContents(url); | 140 WebContents* guest_contents = LoadPdfGetGuestContents(url); |
140 ASSERT_TRUE(guest_contents); | 141 ASSERT_TRUE(guest_contents); |
141 | 142 |
142 base::FilePath test_data_dir; | 143 base::FilePath test_data_dir; |
143 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); | 144 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); |
144 test_data_dir = test_data_dir.Append(FILE_PATH_LITERAL("pdf")); | 145 test_data_dir = test_data_dir.Append(FILE_PATH_LITERAL("pdf")); |
145 base::FilePath test_util_path = test_data_dir.AppendASCII("test_util.js"); | 146 base::FilePath test_util_path = test_data_dir.AppendASCII("test_util.js"); |
146 std::string test_util_js; | 147 std::string test_util_js; |
147 ASSERT_TRUE(base::ReadFileToString(test_util_path, &test_util_js)); | 148 ASSERT_TRUE(base::ReadFileToString(test_util_path, &test_util_js)); |
148 | 149 |
149 base::FilePath test_file_path = test_data_dir.AppendASCII(filename); | 150 base::FilePath test_file_path = test_data_dir.AppendASCII(filename); |
150 std::string test_js; | 151 std::string test_js; |
151 ASSERT_TRUE(base::ReadFileToString(test_file_path, &test_js)); | 152 ASSERT_TRUE(base::ReadFileToString(test_file_path, &test_js)); |
152 | 153 |
153 test_util_js.append(test_js); | 154 test_util_js.append(test_js); |
154 ASSERT_TRUE(content::ExecuteScript(guest_contents, test_util_js)); | 155 ASSERT_TRUE(content::ExecuteScript(guest_contents, test_util_js)); |
155 | 156 |
156 if (!catcher.GetNextResult()) | 157 if (!catcher.GetNextResult()) |
157 FAIL() << catcher.message(); | 158 FAIL() << catcher.message(); |
158 } | 159 } |
159 | 160 |
160 // Load the PDF at the given URL and use the PDFScriptingAPI to ensure it has | 161 // Load the PDF at the given URL and use the PDFScriptingAPI to ensure it has |
161 // finished loading. Return true if it loads successfully or false if it | 162 // finished loading. Return true if it loads successfully or false if it |
162 // fails. If it doesn't finish loading the test will hang. This is done from | 163 // fails. If it doesn't finish loading the test will hang. This is done from |
163 // outside of the BrowserPlugin guest to ensure the PDFScriptingAPI works | 164 // outside of the BrowserPlugin guest to ensure the PDFScriptingAPI works |
164 // correctly from there. | 165 // correctly from there. |
165 bool LoadPdf(const GURL& url) { | 166 bool LoadPdf(const GURL& url) { |
166 ui_test_utils::NavigateToURL(browser(), url); | 167 ui_test_utils::NavigateToURL(browser(), url); |
167 content::WebContents* web_contents = | 168 WebContents* web_contents = GetActiveWebContents(); |
168 browser()->tab_strip_model()->GetActiveWebContents(); | |
169 return pdf_extension_test_util::EnsurePDFHasLoaded(web_contents); | 169 return pdf_extension_test_util::EnsurePDFHasLoaded(web_contents); |
170 } | 170 } |
171 | 171 |
172 // Same as |LoadPdf|, but also returns a pointer to the guest WebContents for | 172 // Same as |LoadPdf|, but also returns a pointer to the guest WebContents for |
173 // the loaded PDF. Returns nullptr if the load fails. | 173 // the loaded PDF. Returns nullptr if the load fails. |
174 content::WebContents* LoadPdfGetGuestContents(const GURL& url) { | 174 WebContents* LoadPdfGetGuestContents(const GURL& url) { |
175 if (!LoadPdf(url)) | 175 if (!LoadPdf(url)) |
176 return nullptr; | 176 return nullptr; |
177 | 177 |
178 content::WebContents* contents = | 178 WebContents* contents = GetActiveWebContents(); |
179 browser()->tab_strip_model()->GetActiveWebContents(); | |
180 content::BrowserPluginGuestManager* guest_manager = | 179 content::BrowserPluginGuestManager* guest_manager = |
181 contents->GetBrowserContext()->GetGuestManager(); | 180 contents->GetBrowserContext()->GetGuestManager(); |
182 content::WebContents* guest_contents = | 181 WebContents* guest_contents = guest_manager->GetFullPageGuest(contents); |
183 guest_manager->GetFullPageGuest(contents); | |
184 return guest_contents; | 182 return guest_contents; |
185 } | 183 } |
186 | 184 |
187 // Load all the PDFs contained in chrome/test/data/<dir_name>. This only runs | 185 // Load all the PDFs contained in chrome/test/data/<dir_name>. This only runs |
188 // the test if base::Hash(filename) mod kNumberLoadTestParts == k in order | 186 // the test if base::Hash(filename) mod kNumberLoadTestParts == k in order |
189 // to shard the files evenly across values of k in [0, kNumberLoadTestParts). | 187 // to shard the files evenly across values of k in [0, kNumberLoadTestParts). |
190 void LoadAllPdfsTest(const std::string& dir_name, int k) { | 188 void LoadAllPdfsTest(const std::string& dir_name, int k) { |
191 base::FilePath test_data_dir; | 189 base::FilePath test_data_dir; |
192 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); | 190 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
193 base::FileEnumerator file_enumerator(test_data_dir.AppendASCII(dir_name), | 191 base::FileEnumerator file_enumerator(test_data_dir.AppendASCII(dir_name), |
(...skipping 13 matching lines...) Expand all Loading... |
207 EXPECT_EQ(!PdfIsExpectedToFailLoad(pdf_file), success); | 205 EXPECT_EQ(!PdfIsExpectedToFailLoad(pdf_file), success); |
208 } | 206 } |
209 ++count; | 207 ++count; |
210 } | 208 } |
211 // Assume that there is at least 1 pdf in the directory to guard against | 209 // Assume that there is at least 1 pdf in the directory to guard against |
212 // someone deleting the directory and silently making the test pass. | 210 // someone deleting the directory and silently making the test pass. |
213 ASSERT_GE(count, 1u); | 211 ASSERT_GE(count, 1u); |
214 } | 212 } |
215 | 213 |
216 void TestGetSelectedTextReply(GURL url, bool expect_success) { | 214 void TestGetSelectedTextReply(GURL url, bool expect_success) { |
217 ui_test_utils::NavigateToURL(browser(), url); | 215 ASSERT_TRUE(LoadPdf(url)); |
218 content::WebContents* web_contents = | |
219 browser()->tab_strip_model()->GetActiveWebContents(); | |
220 ASSERT_TRUE(pdf_extension_test_util::EnsurePDFHasLoaded(web_contents)); | |
221 | 216 |
222 // Reach into the guest and hook into it such that it posts back a 'flush' | 217 // Reach into the guest and hook into it such that it posts back a 'flush' |
223 // message after every getSelectedTextReply message sent. | 218 // message after every getSelectedTextReply message sent. |
| 219 WebContents* web_contents = GetActiveWebContents(); |
224 content::BrowserPluginGuestManager* guest_manager = | 220 content::BrowserPluginGuestManager* guest_manager = |
225 web_contents->GetBrowserContext()->GetGuestManager(); | 221 web_contents->GetBrowserContext()->GetGuestManager(); |
226 content::WebContents* guest_contents = nullptr; | 222 WebContents* guest_contents = nullptr; |
227 ASSERT_NO_FATAL_FAILURE(guest_manager->ForEachGuest( | 223 ASSERT_NO_FATAL_FAILURE(guest_manager->ForEachGuest( |
228 web_contents, base::Bind(&GetGuestCallback, &guest_contents))); | 224 web_contents, base::Bind(&GetGuestCallback, &guest_contents))); |
229 ASSERT_TRUE(guest_contents); | 225 ASSERT_TRUE(guest_contents); |
230 ASSERT_TRUE(content::ExecuteScript( | 226 ASSERT_TRUE(content::ExecuteScript( |
231 guest_contents, | 227 guest_contents, |
232 "var oldSendScriptingMessage = " | 228 "var oldSendScriptingMessage = " |
233 " PDFViewer.prototype.sendScriptingMessage_;" | 229 " PDFViewer.prototype.sendScriptingMessage_;" |
234 "PDFViewer.prototype.sendScriptingMessage_ = function(message) {" | 230 "PDFViewer.prototype.sendScriptingMessage_ = function(message) {" |
235 " oldSendScriptingMessage.bind(this)(message);" | 231 " oldSendScriptingMessage.bind(this)(message);" |
236 " if (message.type == 'getSelectedTextReply')" | 232 " if (message.type == 'getSelectedTextReply')" |
(...skipping 11 matching lines...) Expand all Loading... |
248 " window.domAutomationController.send(false);" | 244 " window.domAutomationController.send(false);" |
249 " if (event.data.type == 'getSelectedTextReply')" | 245 " if (event.data.type == 'getSelectedTextReply')" |
250 " window.domAutomationController.send(true);" | 246 " window.domAutomationController.send(true);" |
251 "});" | 247 "});" |
252 "document.getElementsByTagName('embed')[0].postMessage(" | 248 "document.getElementsByTagName('embed')[0].postMessage(" |
253 " {type: 'getSelectedText'});", | 249 " {type: 'getSelectedText'});", |
254 &success)); | 250 &success)); |
255 ASSERT_EQ(expect_success, success); | 251 ASSERT_EQ(expect_success, success); |
256 } | 252 } |
257 | 253 |
258 void ConvertPageCoordToScreenCoord(content::WebContents* contents, | 254 void ConvertPageCoordToScreenCoord(WebContents* contents, gfx::Point* point) { |
259 gfx::Point* point) { | |
260 ASSERT_TRUE(contents); | 255 ASSERT_TRUE(contents); |
261 ASSERT_TRUE(content::ExecuteScript(contents, | 256 ASSERT_TRUE(content::ExecuteScript(contents, |
262 "var visiblePage = viewer.viewport.getMostVisiblePage();" | 257 "var visiblePage = viewer.viewport.getMostVisiblePage();" |
263 "var visiblePageDimensions =" | 258 "var visiblePageDimensions =" |
264 " viewer.viewport.getPageScreenRect(visiblePage);" | 259 " viewer.viewport.getPageScreenRect(visiblePage);" |
265 "var viewportPosition = viewer.viewport.position;" | 260 "var viewportPosition = viewer.viewport.position;" |
266 "var screenOffsetX = visiblePageDimensions.x - viewportPosition.x;" | 261 "var screenOffsetX = visiblePageDimensions.x - viewportPosition.x;" |
267 "var screenOffsetY = visiblePageDimensions.y - viewportPosition.y;" | 262 "var screenOffsetY = visiblePageDimensions.y - viewportPosition.y;" |
268 "var linkScreenPositionX =" | 263 "var linkScreenPositionX =" |
269 " Math.floor(" + base::IntToString(point->x()) + " + screenOffsetX);" | 264 " Math.floor(" + base::IntToString(point->x()) + " + screenOffsetX);" |
270 "var linkScreenPositionY =" | 265 "var linkScreenPositionY =" |
271 " Math.floor(" + base::IntToString(point->y()) + " +" | 266 " Math.floor(" + base::IntToString(point->y()) + " +" |
272 " screenOffsetY);")); | 267 " screenOffsetY);")); |
273 | 268 |
274 int x; | 269 int x; |
275 ASSERT_TRUE(content::ExecuteScriptAndExtractInt( | 270 ASSERT_TRUE(content::ExecuteScriptAndExtractInt( |
276 contents, | 271 contents, |
277 "window.domAutomationController.send(linkScreenPositionX);", | 272 "window.domAutomationController.send(linkScreenPositionX);", |
278 &x)); | 273 &x)); |
279 | 274 |
280 int y; | 275 int y; |
281 ASSERT_TRUE(content::ExecuteScriptAndExtractInt( | 276 ASSERT_TRUE(content::ExecuteScriptAndExtractInt( |
282 contents, | 277 contents, |
283 "window.domAutomationController.send(linkScreenPositionY);", | 278 "window.domAutomationController.send(linkScreenPositionY);", |
284 &y)); | 279 &y)); |
285 | 280 |
286 point->SetPoint(x, y); | 281 point->SetPoint(x, y); |
287 } | 282 } |
| 283 |
| 284 WebContents* GetActiveWebContents() { |
| 285 return browser()->tab_strip_model()->GetActiveWebContents(); |
| 286 } |
288 }; | 287 }; |
289 | 288 |
290 IN_PROC_BROWSER_TEST_P(PDFExtensionTest, Load) { | 289 IN_PROC_BROWSER_TEST_P(PDFExtensionTest, Load) { |
291 #if defined(GOOGLE_CHROME_BUILD) | 290 #if defined(GOOGLE_CHROME_BUILD) |
292 // Load private PDFs. | 291 // Load private PDFs. |
293 LoadAllPdfsTest("pdf_private", GetParam()); | 292 LoadAllPdfsTest("pdf_private", GetParam()); |
294 #endif | 293 #endif |
295 // Load public PDFs. | 294 // Load public PDFs. |
296 LoadAllPdfsTest("pdf", GetParam()); | 295 LoadAllPdfsTest("pdf", GetParam()); |
297 } | 296 } |
(...skipping 22 matching lines...) Expand all Loading... |
320 } | 319 } |
321 | 320 |
322 private: | 321 private: |
323 content::NotificationRegistrar registrar_; | 322 content::NotificationRegistrar registrar_; |
324 base::RunLoop download_run_loop_; | 323 base::RunLoop download_run_loop_; |
325 GURL last_url_; | 324 GURL last_url_; |
326 }; | 325 }; |
327 | 326 |
328 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DisablePlugin) { | 327 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DisablePlugin) { |
329 // Disable the PDF plugin. | 328 // Disable the PDF plugin. |
330 content::WebContents* web_contents = | 329 WebContents* web_contents = GetActiveWebContents(); |
331 browser()->tab_strip_model()->GetActiveWebContents(); | |
332 content::BrowserContext* browser_context = web_contents->GetBrowserContext(); | 330 content::BrowserContext* browser_context = web_contents->GetBrowserContext(); |
333 Profile* profile = Profile::FromBrowserContext(browser_context); | 331 Profile* profile = Profile::FromBrowserContext(browser_context); |
334 DisablePluginHelper helper; | 332 DisablePluginHelper helper; |
335 helper.DisablePlugin(profile); | 333 helper.DisablePlugin(profile); |
336 | 334 |
337 // Register a download observer. | 335 // Register a download observer. |
338 content::DownloadManager* download_manager = | 336 content::DownloadManager* download_manager = |
339 content::BrowserContext::GetDownloadManager(browser_context); | 337 content::BrowserContext::GetDownloadManager(browser_context); |
340 download_manager->AddObserver(&helper); | 338 download_manager->AddObserver(&helper); |
341 | 339 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, EnsureInternalPluginDisabled) { | 414 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, EnsureInternalPluginDisabled) { |
417 std::string url = embedded_test_server()->GetURL("/pdf/test.pdf").spec(); | 415 std::string url = embedded_test_server()->GetURL("/pdf/test.pdf").spec(); |
418 std::string data_url = | 416 std::string data_url = |
419 "data:text/html," | 417 "data:text/html," |
420 "<html><body>" | 418 "<html><body>" |
421 "<embed type=\"application/x-google-chrome-pdf\" src=\"" + | 419 "<embed type=\"application/x-google-chrome-pdf\" src=\"" + |
422 url + | 420 url + |
423 "\">" | 421 "\">" |
424 "</body></html>"; | 422 "</body></html>"; |
425 ui_test_utils::NavigateToURL(browser(), GURL(data_url)); | 423 ui_test_utils::NavigateToURL(browser(), GURL(data_url)); |
426 content::WebContents* web_contents = | 424 WebContents* web_contents = GetActiveWebContents(); |
427 browser()->tab_strip_model()->GetActiveWebContents(); | |
428 bool plugin_loaded = false; | 425 bool plugin_loaded = false; |
429 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( | 426 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
430 web_contents, | 427 web_contents, |
431 "var plugin_loaded = " | 428 "var plugin_loaded = " |
432 " document.getElementsByTagName('embed')[0].postMessage !== undefined;" | 429 " document.getElementsByTagName('embed')[0].postMessage !== undefined;" |
433 "window.domAutomationController.send(plugin_loaded);", | 430 "window.domAutomationController.send(plugin_loaded);", |
434 &plugin_loaded)); | 431 &plugin_loaded)); |
435 ASSERT_FALSE(plugin_loaded); | 432 ASSERT_FALSE(plugin_loaded); |
436 } | 433 } |
437 | 434 |
(...skipping 11 matching lines...) Expand all Loading... |
449 } | 446 } |
450 | 447 |
451 // Ensure same-origin replies do work for getSelectedText. | 448 // Ensure same-origin replies do work for getSelectedText. |
452 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, EnsureSameOriginRepliesAllowed) { | 449 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, EnsureSameOriginRepliesAllowed) { |
453 TestGetSelectedTextReply(embedded_test_server()->GetURL("/pdf/test.pdf"), | 450 TestGetSelectedTextReply(embedded_test_server()->GetURL("/pdf/test.pdf"), |
454 true); | 451 true); |
455 } | 452 } |
456 | 453 |
457 // Ensure that the PDF component extension cannot be loaded directly. | 454 // Ensure that the PDF component extension cannot be loaded directly. |
458 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, BlockDirectAccess) { | 455 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, BlockDirectAccess) { |
459 content::WebContents* web_contents = | 456 WebContents* web_contents = GetActiveWebContents(); |
460 browser()->tab_strip_model()->GetActiveWebContents(); | |
461 | 457 |
462 std::unique_ptr<content::ConsoleObserverDelegate> console_delegate( | 458 std::unique_ptr<content::ConsoleObserverDelegate> console_delegate( |
463 new content::ConsoleObserverDelegate( | 459 new content::ConsoleObserverDelegate( |
464 web_contents, | 460 web_contents, |
465 "*Streams are only available from a mime handler view guest.*")); | 461 "*Streams are only available from a mime handler view guest.*")); |
466 web_contents->SetDelegate(console_delegate.get()); | 462 web_contents->SetDelegate(console_delegate.get()); |
467 GURL forbiddenUrl( | 463 GURL forbiddenUrl( |
468 "chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/index.html?" | 464 "chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/index.html?" |
469 "https://example.com/notrequested.pdf"); | 465 "https://example.com/notrequested.pdf"); |
470 ui_test_utils::NavigateToURL(browser(), forbiddenUrl); | 466 ui_test_utils::NavigateToURL(browser(), forbiddenUrl); |
471 | 467 |
472 console_delegate->Wait(); | 468 console_delegate->Wait(); |
473 } | 469 } |
474 | 470 |
475 // This test ensures that PDF can be loaded from local file | 471 // This test ensures that PDF can be loaded from local file |
476 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, EnsurePDFFromLocalFileLoads) { | 472 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, EnsurePDFFromLocalFileLoads) { |
477 base::FilePath test_data_dir; | 473 base::FilePath test_data_dir; |
478 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); | 474 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
479 test_data_dir = test_data_dir.Append(FILE_PATH_LITERAL("pdf")); | 475 test_data_dir = test_data_dir.Append(FILE_PATH_LITERAL("pdf")); |
480 base::FilePath test_data_file = test_data_dir.AppendASCII("test.pdf"); | 476 base::FilePath test_data_file = test_data_dir.AppendASCII("test.pdf"); |
481 ASSERT_TRUE(PathExists(test_data_file)); | 477 ASSERT_TRUE(PathExists(test_data_file)); |
482 GURL test_pdf_url("file://" + test_data_file.MaybeAsASCII()); | 478 GURL test_pdf_url("file://" + test_data_file.MaybeAsASCII()); |
483 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 479 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
484 ASSERT_TRUE(guest_contents); | 480 ASSERT_TRUE(guest_contents); |
485 } | 481 } |
486 | 482 |
487 // This test ensures that link permissions are enforced properly in PDFs. | 483 // This test ensures that link permissions are enforced properly in PDFs. |
488 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkPermissions) { | 484 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkPermissions) { |
489 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); | 485 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); |
490 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 486 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
491 ASSERT_TRUE(guest_contents); | 487 ASSERT_TRUE(guest_contents); |
492 | 488 |
493 // chrome://favicon links should be allowed for PDFs, while chrome://settings | 489 // chrome://favicon links should be allowed for PDFs, while chrome://settings |
494 // links should not. | 490 // links should not. |
495 GURL valid_link_url("chrome://favicon/https://www.google.ca/"); | 491 GURL valid_link_url("chrome://favicon/https://www.google.ca/"); |
496 GURL invalid_link_url("chrome://settings"); | 492 GURL invalid_link_url("chrome://settings"); |
497 | 493 |
498 GURL unfiltered_valid_link_url(valid_link_url); | 494 GURL unfiltered_valid_link_url(valid_link_url); |
499 content::RenderProcessHost* rph = guest_contents->GetRenderProcessHost(); | 495 content::RenderProcessHost* rph = guest_contents->GetRenderProcessHost(); |
500 rph->FilterURL(true, &valid_link_url); | 496 rph->FilterURL(true, &valid_link_url); |
501 rph->FilterURL(true, &invalid_link_url); | 497 rph->FilterURL(true, &invalid_link_url); |
502 | 498 |
503 // Invalid link URLs should be changed to "about:blank" when filtered. | 499 // Invalid link URLs should be changed to "about:blank" when filtered. |
504 EXPECT_EQ(unfiltered_valid_link_url, valid_link_url); | 500 EXPECT_EQ(unfiltered_valid_link_url, valid_link_url); |
505 EXPECT_EQ(GURL("about:blank"), invalid_link_url); | 501 EXPECT_EQ(GURL("about:blank"), invalid_link_url); |
506 } | 502 } |
507 | 503 |
508 // This test ensures that titles are set properly for PDFs without /Title. | 504 // This test ensures that titles are set properly for PDFs without /Title. |
509 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, TabTitleWithNoTitle) { | 505 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, TabTitleWithNoTitle) { |
510 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); | 506 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); |
511 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 507 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
512 ASSERT_TRUE(guest_contents); | 508 ASSERT_TRUE(guest_contents); |
513 EXPECT_EQ(base::ASCIIToUTF16("test.pdf"), guest_contents->GetTitle()); | 509 EXPECT_EQ(base::ASCIIToUTF16("test.pdf"), guest_contents->GetTitle()); |
514 EXPECT_EQ(base::ASCIIToUTF16("test.pdf"), | 510 EXPECT_EQ(base::ASCIIToUTF16("test.pdf"), GetActiveWebContents()->GetTitle()); |
515 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); | |
516 } | 511 } |
517 | 512 |
518 // This test ensures that titles are set properly for PDFs with /Title. | 513 // This test ensures that titles are set properly for PDFs with /Title. |
519 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, TabTitleWithTitle) { | 514 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, TabTitleWithTitle) { |
520 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-title.pdf")); | 515 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-title.pdf")); |
521 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 516 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
522 ASSERT_TRUE(guest_contents); | 517 ASSERT_TRUE(guest_contents); |
523 EXPECT_EQ(base::ASCIIToUTF16("PDF title test"), guest_contents->GetTitle()); | 518 EXPECT_EQ(base::ASCIIToUTF16("PDF title test"), guest_contents->GetTitle()); |
524 EXPECT_EQ(base::ASCIIToUTF16("PDF title test"), | 519 EXPECT_EQ(base::ASCIIToUTF16("PDF title test"), |
525 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); | 520 GetActiveWebContents()->GetTitle()); |
526 } | 521 } |
527 | 522 |
528 // This test ensures that titles are set properly for embedded PDFs with /Title. | 523 // This test ensures that titles are set properly for embedded PDFs with /Title. |
529 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, TabTitleWithEmbeddedPdf) { | 524 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, TabTitleWithEmbeddedPdf) { |
530 std::string url = | 525 std::string url = |
531 embedded_test_server()->GetURL("/pdf/test-title.pdf").spec(); | 526 embedded_test_server()->GetURL("/pdf/test-title.pdf").spec(); |
532 std::string data_url = | 527 std::string data_url = |
533 "data:text/html," | 528 "data:text/html," |
534 "<html><head><title>TabTitleWithEmbeddedPdf</title></head><body>" | 529 "<html><head><title>TabTitleWithEmbeddedPdf</title></head><body>" |
535 "<embed type=\"application/pdf\" src=\"" + | 530 "<embed type=\"application/pdf\" src=\"" + |
536 url + | 531 url + |
537 "\"></body></html>"; | 532 "\"></body></html>"; |
538 ui_test_utils::NavigateToURL(browser(), GURL(data_url)); | 533 ASSERT_TRUE(LoadPdf(GURL(data_url))); |
539 content::WebContents* web_contents = | |
540 browser()->tab_strip_model()->GetActiveWebContents(); | |
541 ASSERT_TRUE(pdf_extension_test_util::EnsurePDFHasLoaded(web_contents)); | |
542 EXPECT_EQ(base::ASCIIToUTF16("TabTitleWithEmbeddedPdf"), | 534 EXPECT_EQ(base::ASCIIToUTF16("TabTitleWithEmbeddedPdf"), |
543 web_contents->GetTitle()); | 535 GetActiveWebContents()->GetTitle()); |
544 } | 536 } |
545 | 537 |
546 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfZoomWithoutBubble) { | 538 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfZoomWithoutBubble) { |
547 using namespace zoom; | 539 using namespace zoom; |
548 | 540 |
549 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); | 541 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); |
550 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 542 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
551 ASSERT_TRUE(guest_contents); | 543 ASSERT_TRUE(guest_contents); |
552 content::WebContents* web_contents = | 544 WebContents* web_contents = GetActiveWebContents(); |
553 browser()->tab_strip_model()->GetActiveWebContents(); | |
554 | 545 |
555 // The PDF viewer always starts at default zoom, which for tests is 100% or | 546 // The PDF viewer always starts at default zoom, which for tests is 100% or |
556 // zoom level 0.0. Here we look at the presets to find the next zoom level | 547 // zoom level 0.0. Here we look at the presets to find the next zoom level |
557 // above 0. Ideally we should look at the zoom levels from the PDF viewer | 548 // above 0. Ideally we should look at the zoom levels from the PDF viewer |
558 // javascript, but we assume they'll always match the browser presets, which | 549 // javascript, but we assume they'll always match the browser presets, which |
559 // are easier to access. | 550 // are easier to access. |
560 std::vector<double> preset_zoom_levels = PageZoom::PresetZoomLevels(0.0); | 551 std::vector<double> preset_zoom_levels = PageZoom::PresetZoomLevels(0.0); |
561 std::vector<double>::iterator it = | 552 std::vector<double>::iterator it = |
562 std::find(preset_zoom_levels.begin(), preset_zoom_levels.end(), 0.0); | 553 std::find(preset_zoom_levels.begin(), preset_zoom_levels.end(), 0.0); |
563 ASSERT_TRUE(it != preset_zoom_levels.end()); | 554 ASSERT_TRUE(it != preset_zoom_levels.end()); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 " inlineTextBox 'Second Section\\r\\n'\n" | 634 " inlineTextBox 'Second Section\\r\\n'\n" |
644 " paragraph\n" | 635 " paragraph\n" |
645 " staticText '3'\n" | 636 " staticText '3'\n" |
646 " inlineTextBox '3'\n"; | 637 " inlineTextBox '3'\n"; |
647 | 638 |
648 // https://crbug.com/701427 | 639 // https://crbug.com/701427 |
649 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibility) { | 640 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibility) { |
650 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); | 641 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
651 | 642 |
652 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); | 643 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); |
653 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 644 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
654 ASSERT_TRUE(guest_contents); | 645 ASSERT_TRUE(guest_contents); |
655 | 646 |
656 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, | 647 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, |
657 "1 First Section\r\n"); | 648 "1 First Section\r\n"); |
658 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); | 649 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
659 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); | 650 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
660 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); | 651 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
661 } | 652 } |
662 | 653 |
663 #if defined(GOOGLE_CHROME_BUILD) | 654 #if defined(GOOGLE_CHROME_BUILD) |
664 // Test a particular PDF encountered in the wild that triggered a crash | 655 // Test a particular PDF encountered in the wild that triggered a crash |
665 // when accessibility is enabled. (http://crbug.com/648981) | 656 // when accessibility is enabled. (http://crbug.com/648981) |
666 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityCharCountCrash) { | 657 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityCharCountCrash) { |
667 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); | 658 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
668 GURL test_pdf_url(embedded_test_server()->GetURL( | 659 GURL test_pdf_url(embedded_test_server()->GetURL( |
669 "/pdf_private/accessibility_crash_1.pdf")); | 660 "/pdf_private/accessibility_crash_1.pdf")); |
670 | 661 |
671 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 662 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
672 ASSERT_TRUE(guest_contents); | 663 ASSERT_TRUE(guest_contents); |
673 | 664 |
674 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, "Page 1"); | 665 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, "Page 1"); |
675 } | 666 } |
676 #endif | 667 #endif |
677 | 668 |
678 // https://crbug.com/701427 | 669 // https://crbug.com/701427 |
679 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibilityEnableLater) { | 670 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibilityEnableLater) { |
680 // In this test, load the PDF file first, with accessibility off. | 671 // In this test, load the PDF file first, with accessibility off. |
681 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); | 672 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-bookmarks.pdf")); |
682 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 673 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
683 ASSERT_TRUE(guest_contents); | 674 ASSERT_TRUE(guest_contents); |
684 | 675 |
685 // Now enable accessibility globally, and assert that the PDF accessibility | 676 // Now enable accessibility globally, and assert that the PDF accessibility |
686 // tree loads. | 677 // tree loads. |
687 EnableAccessibilityForWebContents(guest_contents); | 678 EnableAccessibilityForWebContents(guest_contents); |
688 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, | 679 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, |
689 "1 First Section\r\n"); | 680 "1 First Section\r\n"); |
690 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); | 681 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
691 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); | 682 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
692 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); | 683 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
693 } | 684 } |
694 | 685 |
695 bool RetrieveGuestContents( | 686 bool RetrieveGuestContents(WebContents** out_guest_contents, |
696 content::WebContents** out_guest_contents, | 687 WebContents* in_guest_contents) { |
697 content::WebContents* in_guest_contents) { | |
698 *out_guest_contents = in_guest_contents; | 688 *out_guest_contents = in_guest_contents; |
699 return true; | 689 return true; |
700 } | 690 } |
701 | 691 |
702 // https://crbug.com/701427 | 692 // https://crbug.com/701427 |
703 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibilityInIframe) { | 693 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibilityInIframe) { |
704 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); | 694 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
705 GURL test_iframe_url(embedded_test_server()->GetURL("/pdf/test-iframe.html")); | 695 GURL test_iframe_url(embedded_test_server()->GetURL("/pdf/test-iframe.html")); |
706 ui_test_utils::NavigateToURL(browser(), test_iframe_url); | 696 ui_test_utils::NavigateToURL(browser(), test_iframe_url); |
707 content::WebContents* contents = | 697 WebContents* contents = GetActiveWebContents(); |
708 browser()->tab_strip_model()->GetActiveWebContents(); | |
709 WaitForAccessibilityTreeToContainNodeWithName(contents, | 698 WaitForAccessibilityTreeToContainNodeWithName(contents, |
710 "1 First Section\r\n"); | 699 "1 First Section\r\n"); |
711 | 700 |
712 content::WebContents* guest_contents = nullptr; | 701 WebContents* guest_contents = nullptr; |
713 content::BrowserPluginGuestManager* guest_manager = | 702 content::BrowserPluginGuestManager* guest_manager = |
714 contents->GetBrowserContext()->GetGuestManager(); | 703 contents->GetBrowserContext()->GetGuestManager(); |
715 guest_manager->ForEachGuest(contents, | 704 guest_manager->ForEachGuest(contents, |
716 base::Bind(&RetrieveGuestContents, | 705 base::Bind(&RetrieveGuestContents, |
717 &guest_contents)); | 706 &guest_contents)); |
718 ASSERT_TRUE(guest_contents); | 707 ASSERT_TRUE(guest_contents); |
719 | 708 |
720 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); | 709 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
721 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); | 710 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
722 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); | 711 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
723 } | 712 } |
724 | 713 |
725 // https://crbug.com/701427 | 714 // https://crbug.com/701427 |
726 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibilityInOOPIF) { | 715 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_PdfAccessibilityInOOPIF) { |
727 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); | 716 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
728 GURL test_iframe_url(embedded_test_server()->GetURL( | 717 GURL test_iframe_url(embedded_test_server()->GetURL( |
729 "/pdf/test-cross-site-iframe.html")); | 718 "/pdf/test-cross-site-iframe.html")); |
730 ui_test_utils::NavigateToURL(browser(), test_iframe_url); | 719 ui_test_utils::NavigateToURL(browser(), test_iframe_url); |
731 content::WebContents* contents = | 720 WebContents* contents = GetActiveWebContents(); |
732 browser()->tab_strip_model()->GetActiveWebContents(); | |
733 WaitForAccessibilityTreeToContainNodeWithName(contents, | 721 WaitForAccessibilityTreeToContainNodeWithName(contents, |
734 "1 First Section\r\n"); | 722 "1 First Section\r\n"); |
735 | 723 |
736 content::WebContents* guest_contents = nullptr; | 724 WebContents* guest_contents = nullptr; |
737 content::BrowserPluginGuestManager* guest_manager = | 725 content::BrowserPluginGuestManager* guest_manager = |
738 contents->GetBrowserContext()->GetGuestManager(); | 726 contents->GetBrowserContext()->GetGuestManager(); |
739 guest_manager->ForEachGuest(contents, | 727 guest_manager->ForEachGuest(contents, |
740 base::Bind(&RetrieveGuestContents, | 728 base::Bind(&RetrieveGuestContents, |
741 &guest_contents)); | 729 &guest_contents)); |
742 ASSERT_TRUE(guest_contents); | 730 ASSERT_TRUE(guest_contents); |
743 | 731 |
744 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); | 732 ui::AXTreeUpdate ax_tree = GetAccessibilityTreeSnapshot(guest_contents); |
745 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); | 733 std::string ax_tree_dump = DumpPdfAccessibilityTree(ax_tree); |
746 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); | 734 ASSERT_MULTILINE_STREQ(kExpectedPDFAXTree, ax_tree_dump); |
747 } | 735 } |
748 | 736 |
749 #if defined(GOOGLE_CHROME_BUILD) | 737 #if defined(GOOGLE_CHROME_BUILD) |
750 // Test a particular PDF encountered in the wild that triggered a crash | 738 // Test a particular PDF encountered in the wild that triggered a crash |
751 // when accessibility is enabled. (http://crbug.com/668724) | 739 // when accessibility is enabled. (http://crbug.com/668724) |
752 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityTextRunCrash) { | 740 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, PdfAccessibilityTextRunCrash) { |
753 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); | 741 content::BrowserAccessibilityState::GetInstance()->EnableAccessibility(); |
754 GURL test_pdf_url(embedded_test_server()->GetURL( | 742 GURL test_pdf_url(embedded_test_server()->GetURL( |
755 "/pdf_private/accessibility_crash_2.pdf")); | 743 "/pdf_private/accessibility_crash_2.pdf")); |
756 | 744 |
757 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 745 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
758 ASSERT_TRUE(guest_contents); | 746 ASSERT_TRUE(guest_contents); |
759 | 747 |
760 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, "Page 1"); | 748 WaitForAccessibilityTreeToContainNodeWithName(guest_contents, "Page 1"); |
761 } | 749 } |
762 #endif | 750 #endif |
763 | 751 |
764 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkCtrlLeftClick) { | 752 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkCtrlLeftClick) { |
765 host_resolver()->AddRule("www.example.com", "127.0.0.1"); | 753 host_resolver()->AddRule("www.example.com", "127.0.0.1"); |
766 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); | 754 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); |
767 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 755 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
768 ASSERT_TRUE(guest_contents); | 756 ASSERT_TRUE(guest_contents); |
769 | 757 |
770 // The link position of the test-link.pdf in page coordinates is (110, 110). | 758 // The link position of the test-link.pdf in page coordinates is (110, 110). |
771 // Convert the link position from page coordinates to screen coordinates. | 759 // Convert the link position from page coordinates to screen coordinates. |
772 gfx::Point link_position(110, 110); | 760 gfx::Point link_position(110, 110); |
773 ConvertPageCoordToScreenCoord(guest_contents, &link_position); | 761 ConvertPageCoordToScreenCoord(guest_contents, &link_position); |
774 | 762 |
775 content::WebContents* web_contents = | 763 WebContents* web_contents = GetActiveWebContents(); |
776 browser()->tab_strip_model()->GetActiveWebContents(); | |
777 | 764 |
778 content::WindowedNotificationObserver observer( | 765 content::WindowedNotificationObserver observer( |
779 chrome::NOTIFICATION_TAB_ADDED, | 766 chrome::NOTIFICATION_TAB_ADDED, |
780 content::NotificationService::AllSources()); | 767 content::NotificationService::AllSources()); |
781 content::SimulateMouseClickAt(web_contents, kDefaultKeyModifier, | 768 content::SimulateMouseClickAt(web_contents, kDefaultKeyModifier, |
782 blink::WebMouseEvent::Button::Left, link_position); | 769 blink::WebMouseEvent::Button::Left, link_position); |
783 observer.Wait(); | 770 observer.Wait(); |
784 | 771 |
785 int tab_count = browser()->tab_strip_model()->count(); | 772 int tab_count = browser()->tab_strip_model()->count(); |
786 ASSERT_EQ(2, tab_count); | 773 ASSERT_EQ(2, tab_count); |
787 | 774 |
788 content::WebContents* active_web_contents = | 775 WebContents* active_web_contents = GetActiveWebContents(); |
789 browser()->tab_strip_model()->GetActiveWebContents(); | |
790 ASSERT_EQ(web_contents, active_web_contents); | 776 ASSERT_EQ(web_contents, active_web_contents); |
791 | 777 |
792 content::WebContents* new_web_contents = | 778 WebContents* new_web_contents = |
793 browser()->tab_strip_model()->GetWebContentsAt(1); | 779 browser()->tab_strip_model()->GetWebContentsAt(1); |
794 ASSERT_TRUE(new_web_contents); | 780 ASSERT_TRUE(new_web_contents); |
795 ASSERT_NE(web_contents, new_web_contents); | 781 ASSERT_NE(web_contents, new_web_contents); |
796 | 782 |
797 const GURL& url = new_web_contents->GetURL(); | 783 const GURL& url = new_web_contents->GetURL(); |
798 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); | 784 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); |
799 } | 785 } |
800 | 786 |
801 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkMiddleClick) { | 787 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkMiddleClick) { |
802 host_resolver()->AddRule("www.example.com", "127.0.0.1"); | 788 host_resolver()->AddRule("www.example.com", "127.0.0.1"); |
803 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); | 789 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); |
804 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 790 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
805 ASSERT_TRUE(guest_contents); | 791 ASSERT_TRUE(guest_contents); |
806 | 792 |
807 // The link position of the test-link.pdf in page coordinates is (110, 110). | 793 // The link position of the test-link.pdf in page coordinates is (110, 110). |
808 // Convert the link position from page coordinates to screen coordinates. | 794 // Convert the link position from page coordinates to screen coordinates. |
809 gfx::Point link_position(110, 110); | 795 gfx::Point link_position(110, 110); |
810 ConvertPageCoordToScreenCoord(guest_contents, &link_position); | 796 ConvertPageCoordToScreenCoord(guest_contents, &link_position); |
811 | 797 |
812 content::WebContents* web_contents = | 798 WebContents* web_contents = GetActiveWebContents(); |
813 browser()->tab_strip_model()->GetActiveWebContents(); | |
814 | 799 |
815 content::WindowedNotificationObserver observer( | 800 content::WindowedNotificationObserver observer( |
816 chrome::NOTIFICATION_TAB_ADDED, | 801 chrome::NOTIFICATION_TAB_ADDED, |
817 content::NotificationService::AllSources()); | 802 content::NotificationService::AllSources()); |
818 content::SimulateMouseClickAt(web_contents, 0, | 803 content::SimulateMouseClickAt(web_contents, 0, |
819 blink::WebMouseEvent::Button::Middle, link_position); | 804 blink::WebMouseEvent::Button::Middle, link_position); |
820 observer.Wait(); | 805 observer.Wait(); |
821 | 806 |
822 int tab_count = browser()->tab_strip_model()->count(); | 807 int tab_count = browser()->tab_strip_model()->count(); |
823 ASSERT_EQ(2, tab_count); | 808 ASSERT_EQ(2, tab_count); |
824 | 809 |
825 content::WebContents* active_web_contents = | 810 WebContents* active_web_contents = GetActiveWebContents(); |
826 browser()->tab_strip_model()->GetActiveWebContents(); | |
827 ASSERT_EQ(web_contents, active_web_contents); | 811 ASSERT_EQ(web_contents, active_web_contents); |
828 | 812 |
829 content::WebContents* new_web_contents = | 813 WebContents* new_web_contents = |
830 browser()->tab_strip_model()->GetWebContentsAt(1); | 814 browser()->tab_strip_model()->GetWebContentsAt(1); |
831 ASSERT_TRUE(new_web_contents); | 815 ASSERT_TRUE(new_web_contents); |
832 ASSERT_NE(web_contents, new_web_contents); | 816 ASSERT_NE(web_contents, new_web_contents); |
833 | 817 |
834 const GURL& url = new_web_contents->GetURL(); | 818 const GURL& url = new_web_contents->GetURL(); |
835 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); | 819 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); |
836 } | 820 } |
837 | 821 |
838 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkCtrlShiftLeftClick) { | 822 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkCtrlShiftLeftClick) { |
839 host_resolver()->AddRule("www.example.com", "127.0.0.1"); | 823 host_resolver()->AddRule("www.example.com", "127.0.0.1"); |
840 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); | 824 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); |
841 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 825 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
842 ASSERT_TRUE(guest_contents); | 826 ASSERT_TRUE(guest_contents); |
843 | 827 |
844 // The link position of the test-link.pdf in page coordinates is (110, 110). | 828 // The link position of the test-link.pdf in page coordinates is (110, 110). |
845 // Convert the link position from page coordinates to screen coordinates. | 829 // Convert the link position from page coordinates to screen coordinates. |
846 gfx::Point link_position(110, 110); | 830 gfx::Point link_position(110, 110); |
847 ConvertPageCoordToScreenCoord(guest_contents, &link_position); | 831 ConvertPageCoordToScreenCoord(guest_contents, &link_position); |
848 | 832 |
849 content::WebContents* web_contents = | 833 WebContents* web_contents = GetActiveWebContents(); |
850 browser()->tab_strip_model()->GetActiveWebContents(); | |
851 | 834 |
852 int modifiers = blink::WebInputEvent::ShiftKey | kDefaultKeyModifier; | 835 int modifiers = blink::WebInputEvent::ShiftKey | kDefaultKeyModifier; |
853 | 836 |
854 content::WindowedNotificationObserver observer( | 837 content::WindowedNotificationObserver observer( |
855 chrome::NOTIFICATION_TAB_ADDED, | 838 chrome::NOTIFICATION_TAB_ADDED, |
856 content::NotificationService::AllSources()); | 839 content::NotificationService::AllSources()); |
857 content::SimulateMouseClickAt(web_contents, modifiers, | 840 content::SimulateMouseClickAt(web_contents, modifiers, |
858 blink::WebMouseEvent::Button::Left, link_position); | 841 blink::WebMouseEvent::Button::Left, link_position); |
859 observer.Wait(); | 842 observer.Wait(); |
860 | 843 |
861 int tab_count = browser()->tab_strip_model()->count(); | 844 int tab_count = browser()->tab_strip_model()->count(); |
862 ASSERT_EQ(2, tab_count); | 845 ASSERT_EQ(2, tab_count); |
863 | 846 |
864 content::WebContents* active_web_contents = | 847 WebContents* active_web_contents = GetActiveWebContents(); |
865 browser()->tab_strip_model()->GetActiveWebContents(); | |
866 ASSERT_NE(web_contents, active_web_contents); | 848 ASSERT_NE(web_contents, active_web_contents); |
867 | 849 |
868 const GURL& url = active_web_contents->GetURL(); | 850 const GURL& url = active_web_contents->GetURL(); |
869 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); | 851 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); |
870 } | 852 } |
871 | 853 |
872 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkShiftMiddleClick) { | 854 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkShiftMiddleClick) { |
873 host_resolver()->AddRule("www.example.com", "127.0.0.1"); | 855 host_resolver()->AddRule("www.example.com", "127.0.0.1"); |
874 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); | 856 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); |
875 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 857 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
876 ASSERT_TRUE(guest_contents); | 858 ASSERT_TRUE(guest_contents); |
877 | 859 |
878 // The link position of the test-link.pdf in page coordinates is (110, 110). | 860 // The link position of the test-link.pdf in page coordinates is (110, 110). |
879 // Convert the link position from page coordinates to screen coordinates. | 861 // Convert the link position from page coordinates to screen coordinates. |
880 gfx::Point link_position(110, 110); | 862 gfx::Point link_position(110, 110); |
881 ConvertPageCoordToScreenCoord(guest_contents, &link_position); | 863 ConvertPageCoordToScreenCoord(guest_contents, &link_position); |
882 | 864 |
883 content::WebContents* web_contents = | 865 WebContents* web_contents = GetActiveWebContents(); |
884 browser()->tab_strip_model()->GetActiveWebContents(); | |
885 | 866 |
886 content::WindowedNotificationObserver observer( | 867 content::WindowedNotificationObserver observer( |
887 chrome::NOTIFICATION_TAB_ADDED, | 868 chrome::NOTIFICATION_TAB_ADDED, |
888 content::NotificationService::AllSources()); | 869 content::NotificationService::AllSources()); |
889 content::SimulateMouseClickAt(web_contents, blink::WebInputEvent::ShiftKey, | 870 content::SimulateMouseClickAt(web_contents, blink::WebInputEvent::ShiftKey, |
890 blink::WebMouseEvent::Button::Middle, link_position); | 871 blink::WebMouseEvent::Button::Middle, link_position); |
891 observer.Wait(); | 872 observer.Wait(); |
892 | 873 |
893 int tab_count = browser()->tab_strip_model()->count(); | 874 int tab_count = browser()->tab_strip_model()->count(); |
894 ASSERT_EQ(2, tab_count); | 875 ASSERT_EQ(2, tab_count); |
895 | 876 |
896 content::WebContents* active_web_contents = | 877 WebContents* active_web_contents = GetActiveWebContents(); |
897 browser()->tab_strip_model()->GetActiveWebContents(); | |
898 ASSERT_NE(web_contents, active_web_contents); | 878 ASSERT_NE(web_contents, active_web_contents); |
899 | 879 |
900 const GURL& url = active_web_contents->GetURL(); | 880 const GURL& url = active_web_contents->GetURL(); |
901 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); | 881 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); |
902 } | 882 } |
903 | 883 |
904 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkShiftLeftClick) { | 884 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, LinkShiftLeftClick) { |
905 host_resolver()->AddRule("www.example.com", "127.0.0.1"); | 885 host_resolver()->AddRule("www.example.com", "127.0.0.1"); |
906 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); | 886 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test-link.pdf")); |
907 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 887 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
908 ASSERT_TRUE(guest_contents); | 888 ASSERT_TRUE(guest_contents); |
909 ASSERT_EQ(1U, chrome::GetTotalBrowserCount()); | 889 ASSERT_EQ(1U, chrome::GetTotalBrowserCount()); |
910 | 890 |
911 // The link position of the test-link.pdf in page coordinates is (110, 110). | 891 // The link position of the test-link.pdf in page coordinates is (110, 110). |
912 // Convert the link position from page coordinates to screen coordinates. | 892 // Convert the link position from page coordinates to screen coordinates. |
913 gfx::Point link_position(110, 110); | 893 gfx::Point link_position(110, 110); |
914 ConvertPageCoordToScreenCoord(guest_contents, &link_position); | 894 ConvertPageCoordToScreenCoord(guest_contents, &link_position); |
915 | 895 |
916 content::WebContents* web_contents = | 896 WebContents* web_contents = GetActiveWebContents(); |
917 browser()->tab_strip_model()->GetActiveWebContents(); | |
918 | 897 |
919 content::WindowedNotificationObserver observer( | 898 content::WindowedNotificationObserver observer( |
920 chrome::NOTIFICATION_BROWSER_WINDOW_READY, | 899 chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
921 content::NotificationService::AllSources()); | 900 content::NotificationService::AllSources()); |
922 content::SimulateMouseClickAt(web_contents, blink::WebInputEvent::ShiftKey, | 901 content::SimulateMouseClickAt(web_contents, blink::WebInputEvent::ShiftKey, |
923 blink::WebMouseEvent::Button::Left, | 902 blink::WebMouseEvent::Button::Left, |
924 link_position); | 903 link_position); |
925 observer.Wait(); | 904 observer.Wait(); |
926 | 905 |
927 ASSERT_EQ(2U, chrome::GetTotalBrowserCount()); | 906 ASSERT_EQ(2U, chrome::GetTotalBrowserCount()); |
928 | 907 |
929 content::WebContents* active_web_contents = | 908 WebContents* active_web_contents = |
930 chrome::FindLastActive()->tab_strip_model()->GetActiveWebContents(); | 909 chrome::FindLastActive()->tab_strip_model()->GetActiveWebContents(); |
931 ASSERT_NE(web_contents, active_web_contents); | 910 ASSERT_NE(web_contents, active_web_contents); |
932 | 911 |
933 const GURL& url = active_web_contents->GetURL(); | 912 const GURL& url = active_web_contents->GetURL(); |
934 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); | 913 ASSERT_EQ(std::string("http://www.example.com/"), url.spec()); |
935 } | 914 } |
936 | 915 |
937 // Test that if the plugin tries to load a URL that redirects then it will fail | 916 // Test that if the plugin tries to load a URL that redirects then it will fail |
938 // to load. This is to avoid the source origin of the document changing during | 917 // to load. This is to avoid the source origin of the document changing during |
939 // the redirect, which can have security implications. https://crbug.com/653749. | 918 // the redirect, which can have security implications. https://crbug.com/653749. |
940 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, RedirectsFailInPlugin) { | 919 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, RedirectsFailInPlugin) { |
941 RunTestsInFile("redirects_fail_test.js", "test.pdf"); | 920 RunTestsInFile("redirects_fail_test.js", "test.pdf"); |
942 } | 921 } |
943 | 922 |
944 // Test that even if a different tab is selected when a navigation occurs, | 923 // Test that even if a different tab is selected when a navigation occurs, |
945 // the correct tab still gets navigated (see crbug.com/672563). | 924 // the correct tab still gets navigated (see crbug.com/672563). |
946 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, NavigationOnCorrectTab) { | 925 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, NavigationOnCorrectTab) { |
947 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); | 926 GURL test_pdf_url(embedded_test_server()->GetURL("/pdf/test.pdf")); |
948 content::WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); | 927 WebContents* guest_contents = LoadPdfGetGuestContents(test_pdf_url); |
949 ASSERT_TRUE(guest_contents); | 928 ASSERT_TRUE(guest_contents); |
950 content::WebContents* web_contents = | 929 WebContents* web_contents = GetActiveWebContents(); |
951 browser()->tab_strip_model()->GetActiveWebContents(); | |
952 | 930 |
953 ui_test_utils::NavigateToURLWithDisposition( | 931 ui_test_utils::NavigateToURLWithDisposition( |
954 browser(), GURL("about:blank"), | 932 browser(), GURL("about:blank"), |
955 WindowOpenDisposition::NEW_FOREGROUND_TAB, | 933 WindowOpenDisposition::NEW_FOREGROUND_TAB, |
956 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | 934 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | |
957 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 935 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
958 content::WebContents* active_web_contents = | 936 WebContents* active_web_contents = GetActiveWebContents(); |
959 browser()->tab_strip_model()->GetActiveWebContents(); | |
960 ASSERT_NE(web_contents, active_web_contents); | 937 ASSERT_NE(web_contents, active_web_contents); |
961 | 938 |
962 ASSERT_TRUE(content::ExecuteScript( | 939 ASSERT_TRUE(content::ExecuteScript( |
963 guest_contents, | 940 guest_contents, |
964 "viewer.navigator_.navigate(" | 941 "viewer.navigator_.navigate(" |
965 " 'www.example.com', Navigator.WindowOpenDisposition.CURRENT_TAB);")); | 942 " 'www.example.com', Navigator.WindowOpenDisposition.CURRENT_TAB);")); |
966 | 943 |
967 EXPECT_TRUE(web_contents->GetController().GetPendingEntry()); | 944 EXPECT_TRUE(web_contents->GetController().GetPendingEntry()); |
968 EXPECT_FALSE(active_web_contents->GetController().GetPendingEntry()); | 945 EXPECT_FALSE(active_web_contents->GetController().GetPendingEntry()); |
969 } | 946 } |
970 | 947 |
971 // This test opens a PDF by clicking a link via javascript and verifies that | 948 // This test opens a PDF by clicking a link via javascript and verifies that |
972 // the PDF is loaded and functional by clicking a link in the PDF. The link | 949 // the PDF is loaded and functional by clicking a link in the PDF. The link |
973 // click in the PDF opens a new tab. The main page handles the pageShow event | 950 // click in the PDF opens a new tab. The main page handles the pageShow event |
974 // and updates the history state. | 951 // and updates the history state. |
975 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, OpenPDFOnLinkClickWithReplaceState) { | 952 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, OpenPDFOnLinkClickWithReplaceState) { |
976 host_resolver()->AddRule("www.example.com", "127.0.0.1"); | 953 host_resolver()->AddRule("www.example.com", "127.0.0.1"); |
977 | 954 |
978 // Navigate to the main page. | 955 // Navigate to the main page. |
979 GURL test_url( | 956 GURL test_url( |
980 embedded_test_server()->GetURL("/pdf/pdf_href_replace_state.html")); | 957 embedded_test_server()->GetURL("/pdf/pdf_href_replace_state.html")); |
981 ui_test_utils::NavigateToURL(browser(), test_url); | 958 ui_test_utils::NavigateToURL(browser(), test_url); |
982 content::WebContents* web_contents = | 959 WebContents* web_contents = GetActiveWebContents(); |
983 browser()->tab_strip_model()->GetActiveWebContents(); | |
984 ASSERT_TRUE(web_contents); | 960 ASSERT_TRUE(web_contents); |
985 | 961 |
986 // Click on the link which opens the PDF via JS. | 962 // Click on the link which opens the PDF via JS. |
987 content::TestNavigationObserver navigation_observer(web_contents); | 963 content::TestNavigationObserver navigation_observer(web_contents); |
988 const char kPdfLinkClick[] = "document.getElementById('link').click();"; | 964 const char kPdfLinkClick[] = "document.getElementById('link').click();"; |
989 ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(), | 965 ASSERT_TRUE(content::ExecuteScript(web_contents->GetRenderViewHost(), |
990 kPdfLinkClick)); | 966 kPdfLinkClick)); |
991 navigation_observer.Wait(); | 967 navigation_observer.Wait(); |
992 const GURL& current_url = web_contents->GetURL(); | 968 const GURL& current_url = web_contents->GetURL(); |
993 ASSERT_TRUE(current_url.path() == "/pdf/test-link.pdf"); | 969 ASSERT_EQ("/pdf/test-link.pdf", current_url.path()); |
994 | 970 |
995 ASSERT_TRUE(pdf_extension_test_util::EnsurePDFHasLoaded(web_contents)); | 971 ASSERT_TRUE(pdf_extension_test_util::EnsurePDFHasLoaded(web_contents)); |
996 | 972 |
997 // Now click on the link to example.com in the PDF. This should open up a new | 973 // Now click on the link to example.com in the PDF. This should open up a new |
998 // tab. | 974 // tab. |
999 content::BrowserPluginGuestManager* guest_manager = | 975 content::BrowserPluginGuestManager* guest_manager = |
1000 web_contents->GetBrowserContext()->GetGuestManager(); | 976 web_contents->GetBrowserContext()->GetGuestManager(); |
1001 content::WebContents* guest_contents = | 977 WebContents* guest_contents = guest_manager->GetFullPageGuest(web_contents); |
1002 guest_manager->GetFullPageGuest(web_contents); | |
1003 ASSERT_TRUE(guest_contents); | 978 ASSERT_TRUE(guest_contents); |
1004 // The link position of the test-link.pdf in page coordinates is (110, 110). | 979 // The link position of the test-link.pdf in page coordinates is (110, 110). |
1005 // Convert the link position from page coordinates to screen coordinates. | 980 // Convert the link position from page coordinates to screen coordinates. |
1006 gfx::Point link_position(110, 110); | 981 gfx::Point link_position(110, 110); |
1007 ConvertPageCoordToScreenCoord(guest_contents, &link_position); | 982 ConvertPageCoordToScreenCoord(guest_contents, &link_position); |
1008 | 983 |
1009 content::WindowedNotificationObserver observer( | 984 content::WindowedNotificationObserver observer( |
1010 chrome::NOTIFICATION_TAB_ADDED, | 985 chrome::NOTIFICATION_TAB_ADDED, |
1011 content::NotificationService::AllSources()); | 986 content::NotificationService::AllSources()); |
1012 content::SimulateMouseClickAt(web_contents, kDefaultKeyModifier, | 987 content::SimulateMouseClickAt(web_contents, kDefaultKeyModifier, |
1013 blink::WebMouseEvent::Button::Left, | 988 blink::WebMouseEvent::Button::Left, |
1014 link_position); | 989 link_position); |
1015 observer.Wait(); | 990 observer.Wait(); |
1016 | 991 |
1017 // We should have two tabs now. One with the PDF and the second for | 992 // We should have two tabs now. One with the PDF and the second for |
1018 // example.com | 993 // example.com |
1019 int tab_count = browser()->tab_strip_model()->count(); | 994 int tab_count = browser()->tab_strip_model()->count(); |
1020 ASSERT_EQ(2, tab_count); | 995 ASSERT_EQ(2, tab_count); |
1021 | 996 |
1022 content::WebContents* active_web_contents = | 997 WebContents* active_web_contents = GetActiveWebContents(); |
1023 browser()->tab_strip_model()->GetActiveWebContents(); | |
1024 ASSERT_EQ(web_contents, active_web_contents); | 998 ASSERT_EQ(web_contents, active_web_contents); |
1025 | 999 |
1026 content::WebContents* new_web_contents = | 1000 WebContents* new_web_contents = |
1027 browser()->tab_strip_model()->GetWebContentsAt(1); | 1001 browser()->tab_strip_model()->GetWebContentsAt(1); |
1028 ASSERT_TRUE(new_web_contents); | 1002 ASSERT_TRUE(new_web_contents); |
1029 ASSERT_NE(web_contents, new_web_contents); | 1003 ASSERT_NE(web_contents, new_web_contents); |
1030 | 1004 |
1031 const GURL& url = new_web_contents->GetURL(); | 1005 const GURL& url = new_web_contents->GetURL(); |
1032 ASSERT_EQ(GURL("http://www.example.com"), url); | 1006 ASSERT_EQ(GURL("http://www.example.com"), url); |
1033 } | 1007 } |
| 1008 |
| 1009 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, OpenFromFTP) { |
| 1010 net::SpawnedTestServer ftp_server( |
| 1011 net::SpawnedTestServer::TYPE_FTP, net::SpawnedTestServer::kLocalhost, |
| 1012 base::FilePath(FILE_PATH_LITERAL("chrome/test/data/pdf"))); |
| 1013 ASSERT_TRUE(ftp_server.Start()); |
| 1014 |
| 1015 GURL url(ftp_server.GetURL("/test.pdf")); |
| 1016 ASSERT_TRUE(LoadPdf(url)); |
| 1017 EXPECT_EQ(base::ASCIIToUTF16("test.pdf"), GetActiveWebContents()->GetTitle()); |
| 1018 } |
OLD | NEW |