| 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 "base/base_paths.h" | 5 #include "base/base_paths.h" |
| 6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "chrome/browser/extensions/extension_apitest.h" | 8 #include "chrome/browser/extensions/extension_apitest.h" |
| 9 #include "chrome/test/base/ui_test_utils.h" | 9 #include "chrome/test/base/ui_test_utils.h" |
| 10 #include "components/guest_view/browser/test_guest_view_manager.h" | 10 #include "components/guest_view/browser/test_guest_view_manager.h" |
| 11 #include "content/public/common/content_switches.h" |
| 11 #include "content/public/test/browser_test_utils.h" | 12 #include "content/public/test/browser_test_utils.h" |
| 12 #include "extensions/browser/api/extensions_api_client.h" | 13 #include "extensions/browser/api/extensions_api_client.h" |
| 13 #include "extensions/browser/extension_registry.h" | 14 #include "extensions/browser/extension_registry.h" |
| 14 #include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h
" | 15 #include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h
" |
| 15 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues
t.h" | 16 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues
t.h" |
| 16 #include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view
_guest.h" | 17 #include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view
_guest.h" |
| 17 #include "extensions/test/result_catcher.h" | 18 #include "extensions/test/result_catcher.h" |
| 18 #include "net/test/embedded_test_server/embedded_test_server.h" | 19 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 19 | 20 |
| 20 using extensions::ExtensionsAPIClient; | 21 using extensions::ExtensionsAPIClient; |
| 21 using extensions::MimeHandlerViewGuest; | 22 using extensions::MimeHandlerViewGuest; |
| 22 using extensions::TestMimeHandlerViewGuest; | 23 using extensions::TestMimeHandlerViewGuest; |
| 23 using guest_view::GuestViewManager; | 24 using guest_view::GuestViewManager; |
| 24 using guest_view::GuestViewManagerDelegate; | 25 using guest_view::GuestViewManagerDelegate; |
| 25 using guest_view::TestGuestViewManager; | 26 using guest_view::TestGuestViewManager; |
| 26 using guest_view::TestGuestViewManagerFactory; | 27 using guest_view::TestGuestViewManagerFactory; |
| 27 | 28 |
| 28 // The test extension id is set by the key value in the manifest. | 29 // The test extension id is set by the key value in the manifest. |
| 29 const char* kExtensionId = "oickdpebdnfbgkcaoklfcdhjniefkcji"; | 30 const char* kExtensionId = "oickdpebdnfbgkcaoklfcdhjniefkcji"; |
| 30 | 31 |
| 31 class MimeHandlerViewTest : public ExtensionApiTest { | 32 class MimeHandlerViewTest : public ExtensionApiTest, |
| 33 public testing::WithParamInterface<bool> { |
| 32 public: | 34 public: |
| 33 MimeHandlerViewTest() { | 35 MimeHandlerViewTest() { |
| 34 GuestViewManager::set_factory_for_testing(&factory_); | 36 GuestViewManager::set_factory_for_testing(&factory_); |
| 35 } | 37 } |
| 36 | 38 |
| 37 ~MimeHandlerViewTest() override {} | 39 ~MimeHandlerViewTest() override {} |
| 38 | 40 |
| 41 // TODO(ekaramad): These tests run for OOPIF guests too, except that they |
| 42 // still use BrowserPlugin code path. They are activated to make sure we can |
| 43 // still show PDF when the rest of the guests migrate to OOPIF. Eventually, |
| 44 // MimeHandlerViewGuest will be based on OOPIF and we can remove this comment |
| 45 // (https://crbug.com/563285). |
| 46 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 47 ExtensionApiTest::SetUpCommandLine(command_line); |
| 48 |
| 49 bool use_cross_process_frames_for_guests = GetParam(); |
| 50 if (use_cross_process_frames_for_guests) |
| 51 command_line->AppendSwitch(switches::kUseCrossProcessFramesForGuests); |
| 52 } |
| 53 |
| 39 // TODO(paulmeyer): This function is implemented over and over by the | 54 // TODO(paulmeyer): This function is implemented over and over by the |
| 40 // different GuestView test classes. It really needs to be refactored out to | 55 // different GuestView test classes. It really needs to be refactored out to |
| 41 // some kind of GuestViewTest base class. | 56 // some kind of GuestViewTest base class. |
| 42 TestGuestViewManager* GetGuestViewManager() { | 57 TestGuestViewManager* GetGuestViewManager() { |
| 43 TestGuestViewManager* manager = static_cast<TestGuestViewManager*>( | 58 TestGuestViewManager* manager = static_cast<TestGuestViewManager*>( |
| 44 TestGuestViewManager::FromBrowserContext(browser()->profile())); | 59 TestGuestViewManager::FromBrowserContext(browser()->profile())); |
| 45 // TestGuestViewManager::WaitForSingleGuestCreated can and will get called | 60 // TestGuestViewManager::WaitForSingleGuestCreated can and will get called |
| 46 // before a guest is created. Since GuestViewManager is usually not created | 61 // before a guest is created. Since GuestViewManager is usually not created |
| 47 // until the first guest is created, this means that |manager| will be | 62 // until the first guest is created, this means that |manager| will be |
| 48 // nullptr if trying to use the manager to wait for the first guest. Because | 63 // nullptr if trying to use the manager to wait for the first guest. Because |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 embedded_test_server()->ServeFilesFromDirectory( | 103 embedded_test_server()->ServeFilesFromDirectory( |
| 89 test_data_dir_.AppendASCII("mime_handler_view")); | 104 test_data_dir_.AppendASCII("mime_handler_view")); |
| 90 | 105 |
| 91 RunTestWithUrl(embedded_test_server()->GetURL("/" + path)); | 106 RunTestWithUrl(embedded_test_server()->GetURL("/" + path)); |
| 92 } | 107 } |
| 93 | 108 |
| 94 private: | 109 private: |
| 95 TestGuestViewManagerFactory factory_; | 110 TestGuestViewManagerFactory factory_; |
| 96 }; | 111 }; |
| 97 | 112 |
| 98 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, PostMessage) { | 113 INSTANTIATE_TEST_CASE_P(MimeHandlerViewTests, |
| 114 MimeHandlerViewTest, |
| 115 testing::Bool()); |
| 116 |
| 117 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, PostMessage) { |
| 99 RunTest("test_postmessage.html"); | 118 RunTest("test_postmessage.html"); |
| 100 } | 119 } |
| 101 | 120 |
| 102 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, Basic) { | 121 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, Basic) { |
| 103 RunTest("testBasic.csv"); | 122 RunTest("testBasic.csv"); |
| 104 } | 123 } |
| 105 | 124 |
| 106 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, Embedded) { | 125 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, Embedded) { |
| 107 RunTest("test_embedded.html"); | 126 RunTest("test_embedded.html"); |
| 108 } | 127 } |
| 109 | 128 |
| 110 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, Iframe) { | 129 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, Iframe) { |
| 111 RunTest("test_iframe.html"); | 130 RunTest("test_iframe.html"); |
| 112 } | 131 } |
| 113 | 132 |
| 114 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, Abort) { | 133 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, Abort) { |
| 115 RunTest("testAbort.csv"); | 134 RunTest("testAbort.csv"); |
| 116 } | 135 } |
| 117 | 136 |
| 118 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, NonAsciiHeaders) { | 137 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, NonAsciiHeaders) { |
| 119 RunTest("testNonAsciiHeaders.csv"); | 138 RunTest("testNonAsciiHeaders.csv"); |
| 120 } | 139 } |
| 121 | 140 |
| 122 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, DataUrl) { | 141 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, DataUrl) { |
| 123 const char* kDataUrlCsv = "data:text/csv;base64,Y29udGVudCB0byByZWFkCg=="; | 142 const char* kDataUrlCsv = "data:text/csv;base64,Y29udGVudCB0byByZWFkCg=="; |
| 124 RunTestWithUrl(GURL(kDataUrlCsv)); | 143 RunTestWithUrl(GURL(kDataUrlCsv)); |
| 125 } | 144 } |
| 126 | 145 |
| 127 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, EmbeddedDataUrlObject) { | 146 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, EmbeddedDataUrlObject) { |
| 128 RunTest("test_embedded_data_url_object.html"); | 147 RunTest("test_embedded_data_url_object.html"); |
| 129 } | 148 } |
| 130 | 149 |
| 131 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, EmbeddedDataUrlEmbed) { | 150 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, EmbeddedDataUrlEmbed) { |
| 132 RunTest("test_embedded_data_url_embed.html"); | 151 RunTest("test_embedded_data_url_embed.html"); |
| 133 } | 152 } |
| 134 | 153 |
| 135 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, EmbeddedDataUrlLong) { | 154 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, EmbeddedDataUrlLong) { |
| 136 RunTest("test_embedded_data_url_long.html"); | 155 RunTest("test_embedded_data_url_long.html"); |
| 137 } | 156 } |
| 138 | 157 |
| 139 IN_PROC_BROWSER_TEST_F(MimeHandlerViewTest, ResizeBeforeAttach) { | 158 IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, ResizeBeforeAttach) { |
| 140 // Delay the creation of the guest's WebContents in order to delay the guest's | 159 // Delay the creation of the guest's WebContents in order to delay the guest's |
| 141 // attachment to the embedder. This will allow us to resize the <object> tag | 160 // attachment to the embedder. This will allow us to resize the <object> tag |
| 142 // after the guest is created, but before it is attached in | 161 // after the guest is created, but before it is attached in |
| 143 // "test_resize_before_attach.html". | 162 // "test_resize_before_attach.html". |
| 144 TestMimeHandlerViewGuest::DelayNextCreateWebContents(500); | 163 TestMimeHandlerViewGuest::DelayNextCreateWebContents(500); |
| 145 RunTest("test_resize_before_attach.html"); | 164 RunTest("test_resize_before_attach.html"); |
| 146 | 165 |
| 147 // Wait for the guest to attach. | 166 // Wait for the guest to attach. |
| 148 content::WebContents* guest_web_contents = | 167 content::WebContents* guest_web_contents = |
| 149 GetGuestViewManager()->WaitForSingleGuestCreated(); | 168 GetGuestViewManager()->WaitForSingleGuestCreated(); |
| 150 TestMimeHandlerViewGuest* guest = static_cast<TestMimeHandlerViewGuest*>( | 169 TestMimeHandlerViewGuest* guest = static_cast<TestMimeHandlerViewGuest*>( |
| 151 MimeHandlerViewGuest::FromWebContents(guest_web_contents)); | 170 MimeHandlerViewGuest::FromWebContents(guest_web_contents)); |
| 152 guest->WaitForGuestAttached(); | 171 guest->WaitForGuestAttached(); |
| 153 | 172 |
| 154 // Ensure that the guest has the correct size after it has attached. | 173 // Ensure that the guest has the correct size after it has attached. |
| 155 auto guest_size = guest->size(); | 174 auto guest_size = guest->size(); |
| 156 CHECK_EQ(guest_size.width(), 500); | 175 CHECK_EQ(guest_size.width(), 500); |
| 157 CHECK_EQ(guest_size.height(), 400); | 176 CHECK_EQ(guest_size.height(), 400); |
| 158 } | 177 } |
| OLD | NEW |