OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 // |
| 5 // MediaGalleriesPrivate gallery watch API browser tests. |
| 6 |
| 7 #include "base/utf_string_conversions.h" |
| 8 #include "build/build_config.h" |
| 9 #include "chrome/browser/extensions/extension_apitest.h" |
| 10 #include "chrome/browser/extensions/extension_service.h" |
| 11 #include "chrome/browser/extensions/extension_system.h" |
| 12 #include "chrome/browser/extensions/extension_test_message_listener.h" |
| 13 #include "chrome/browser/media_gallery/media_galleries_test_util.h" |
| 14 #include "chrome/common/chrome_paths.h" |
| 15 #include "chrome/common/chrome_switches.h" |
| 16 #include "chrome/common/extensions/extension.h" |
| 17 #include "content/public/browser/render_view_host.h" |
| 18 |
| 19 namespace { |
| 20 |
| 21 // Id of test extension from |
| 22 // chrome/test/data/extensions/api_test/|kTestExtensionPath| |
| 23 const char kTestExtensionId[] = "gceegfkgibmgpfopknlcgleimclbknie"; |
| 24 const char kTestExtensionPath[] = "media_galleries_private/gallerywatch"; |
| 25 |
| 26 // JS commands. |
| 27 const char kAddGalleryChangedListenerCmd[] = "addGalleryChangedListener()"; |
| 28 const char kGetMediaFileSystemsCmd[] = "getMediaFileSystems()"; |
| 29 const char kRemoveGalleryChangedListenerCmd[] = |
| 30 "removeGalleryChangedListener()"; |
| 31 const char kRemoveGalleryWatchCmd[] = "removeGalleryWatch()"; |
| 32 const char kSetupWatchOnValidGalleriesCmd[] = "setupWatchOnValidGalleries()"; |
| 33 const char kSetupWatchOnInvalidGalleryCmd[] = "setupWatchOnInvalidGallery()"; |
| 34 |
| 35 // And JS reply messages. |
| 36 const char kAddGalleryWatchOK[] = "add_gallery_watch_ok"; |
| 37 const char kAddGalleryChangedListenerOK[] = "add_gallery_changed_listener_ok"; |
| 38 const char kGetMediaFileSystemsOK[] = "get_media_file_systems_ok"; |
| 39 const char kGetMediaFileSystemsCallbackOK[] = |
| 40 "get_media_file_systems_callback_ok"; |
| 41 const char kRemoveGalleryChangedListenerOK[] = |
| 42 "remove_gallery_changed_listener_ok"; |
| 43 const char kRemoveGalleryWatchOK[] = "remove_gallery_watch_ok"; |
| 44 |
| 45 // Test reply messages. |
| 46 const char kAddGalleryWatchRequestSucceeded[] = "add_watch_request_succeeded"; |
| 47 const char kAddGalleryWatchRequestFailed[] = "add_watch_request_failed"; |
| 48 const char kGalleryChangedEventReceived[] = "gallery_changed_event_recevied"; |
| 49 |
| 50 } // namespace |
| 51 |
| 52 |
| 53 /////////////////////////////////////////////////////////////////////////////// |
| 54 // MediaGalleriesPrivateGalleryWatchApiTest // |
| 55 /////////////////////////////////////////////////////////////////////////////// |
| 56 |
| 57 class MediaGalleriesPrivateGalleryWatchApiTest : public ExtensionApiTest { |
| 58 public: |
| 59 MediaGalleriesPrivateGalleryWatchApiTest() {} |
| 60 virtual ~MediaGalleriesPrivateGalleryWatchApiTest() {} |
| 61 |
| 62 protected: |
| 63 // ExtensionApiTest overrides. |
| 64 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 65 ExtensionApiTest::SetUpCommandLine(command_line); |
| 66 command_line->AppendSwitchASCII(switches::kWhitelistedExtensionID, |
| 67 kTestExtensionId); |
| 68 } |
| 69 |
| 70 void ExecuteCmdAndCheckReply(content::RenderViewHost* host, |
| 71 const std::string& js_command, |
| 72 const std::string& ok_message) { |
| 73 ExtensionTestMessageListener listener(ok_message, false); |
| 74 host->ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(js_command)); |
| 75 EXPECT_TRUE(listener.WaitUntilSatisfied()); |
| 76 } |
| 77 |
| 78 private: |
| 79 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPrivateGalleryWatchApiTest); |
| 80 }; |
| 81 |
| 82 |
| 83 /////////////////////////////////////////////////////////////////////////////// |
| 84 // TESTS // |
| 85 /////////////////////////////////////////////////////////////////////////////// |
| 86 |
| 87 #if defined(OS_WIN) |
| 88 IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, |
| 89 BasicGalleryWatch) { |
| 90 chrome::EnsureMediaDirectoriesExists media_directories; |
| 91 const extensions::Extension* extension = |
| 92 LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); |
| 93 ASSERT_TRUE(extension); |
| 94 content::RenderViewHost* host = |
| 95 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 96 process_manager()->GetBackgroundHostForExtension(extension->id())-> |
| 97 render_view_host(); |
| 98 ASSERT_TRUE(host); |
| 99 |
| 100 // Get media file systems. |
| 101 ExtensionTestMessageListener get_media_systems_finished( |
| 102 kGetMediaFileSystemsCallbackOK, false /* no reply */); |
| 103 ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd, |
| 104 kGetMediaFileSystemsOK); |
| 105 EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied()); |
| 106 ASSERT_TRUE(media_directories.num_galleries() != 0); |
| 107 |
| 108 // Set up gallery watch. |
| 109 ExtensionTestMessageListener add_gallery_watch_finished( |
| 110 kAddGalleryWatchRequestSucceeded, false /* no reply */); |
| 111 ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd, |
| 112 kAddGalleryWatchOK); |
| 113 EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied()); |
| 114 |
| 115 // Add gallery watch listener. |
| 116 ExecuteCmdAndCheckReply(host, kAddGalleryChangedListenerCmd, |
| 117 kAddGalleryChangedListenerOK); |
| 118 |
| 119 // Modify gallery contents. |
| 120 ExtensionTestMessageListener music_gallery_change_event_received( |
| 121 kGalleryChangedEventReceived, false /* no reply */); |
| 122 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_MUSIC)); |
| 123 EXPECT_TRUE(music_gallery_change_event_received.WaitUntilSatisfied()); |
| 124 |
| 125 ExtensionTestMessageListener pictures_gallery_change_event_received( |
| 126 kGalleryChangedEventReceived, false /* no reply */); |
| 127 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_PICTURES)); |
| 128 EXPECT_TRUE(pictures_gallery_change_event_received.WaitUntilSatisfied()); |
| 129 |
| 130 ExtensionTestMessageListener videos_gallery_change_event_received( |
| 131 kGalleryChangedEventReceived, false /* no reply */); |
| 132 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_VIDEOS)); |
| 133 EXPECT_TRUE(videos_gallery_change_event_received.WaitUntilSatisfied()); |
| 134 |
| 135 // Remove gallery watch listener. |
| 136 ExecuteCmdAndCheckReply(host, kRemoveGalleryChangedListenerCmd, |
| 137 kRemoveGalleryChangedListenerOK); |
| 138 |
| 139 // Remove gallery watch request. |
| 140 ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); |
| 141 } |
| 142 |
| 143 IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, |
| 144 RemoveListenerAndModifyGallery) { |
| 145 chrome::EnsureMediaDirectoriesExists media_directories; |
| 146 const extensions::Extension* extension = |
| 147 LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); |
| 148 ASSERT_TRUE(extension); |
| 149 content::RenderViewHost* host = |
| 150 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 151 process_manager()->GetBackgroundHostForExtension(extension->id())-> |
| 152 render_view_host(); |
| 153 ASSERT_TRUE(host); |
| 154 |
| 155 // Get media file systems. |
| 156 ExtensionTestMessageListener get_media_systems_finished( |
| 157 kGetMediaFileSystemsCallbackOK, false /* no reply */); |
| 158 ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd, |
| 159 kGetMediaFileSystemsOK); |
| 160 EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied()); |
| 161 ASSERT_TRUE(media_directories.num_galleries() != 0); |
| 162 |
| 163 // Set up gallery watch. |
| 164 ExtensionTestMessageListener add_gallery_watch_finished( |
| 165 kAddGalleryWatchRequestSucceeded, false /* no reply */); |
| 166 ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd, |
| 167 kAddGalleryWatchOK); |
| 168 EXPECT_TRUE(add_gallery_watch_finished.WaitUntilSatisfied()); |
| 169 |
| 170 // Add a gallery watch listener. |
| 171 ExecuteCmdAndCheckReply(host, kAddGalleryChangedListenerCmd, |
| 172 kAddGalleryChangedListenerOK); |
| 173 // Modify gallery contents. |
| 174 ExtensionTestMessageListener music_gallery_change_event_received( |
| 175 kGalleryChangedEventReceived, false /* no reply */); |
| 176 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_MUSIC)); |
| 177 EXPECT_TRUE(music_gallery_change_event_received.WaitUntilSatisfied()); |
| 178 |
| 179 // Remove gallery watch listener. |
| 180 ExecuteCmdAndCheckReply(host, kRemoveGalleryChangedListenerCmd, |
| 181 kRemoveGalleryChangedListenerOK); |
| 182 |
| 183 // No listener, modify gallery contents. |
| 184 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_MUSIC)); |
| 185 |
| 186 // Remove gallery watch. |
| 187 ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); |
| 188 } |
| 189 |
| 190 IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, |
| 191 SetupGalleryWatchWithoutListeners) { |
| 192 chrome::EnsureMediaDirectoriesExists media_directories; |
| 193 const extensions::Extension* extension = |
| 194 LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); |
| 195 ASSERT_TRUE(extension); |
| 196 content::RenderViewHost* host = |
| 197 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 198 process_manager()->GetBackgroundHostForExtension(extension->id())-> |
| 199 render_view_host(); |
| 200 ASSERT_TRUE(host); |
| 201 |
| 202 // Get media file systems. |
| 203 ExtensionTestMessageListener get_media_systems_finished( |
| 204 kGetMediaFileSystemsCallbackOK, false /* no reply */); |
| 205 ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd, |
| 206 kGetMediaFileSystemsOK); |
| 207 EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied()); |
| 208 ASSERT_TRUE(media_directories.num_galleries() != 0); |
| 209 |
| 210 // Set up gallery watch. |
| 211 ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd, |
| 212 kAddGalleryWatchOK); |
| 213 |
| 214 // No listeners, modify gallery contents. |
| 215 ExtensionTestMessageListener music_gallery_change_event_received( |
| 216 kGalleryChangedEventReceived, false /* no reply */); |
| 217 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_MUSIC)); |
| 218 |
| 219 // Remove gallery watch. |
| 220 ExecuteCmdAndCheckReply(host, kRemoveGalleryWatchCmd, kRemoveGalleryWatchOK); |
| 221 } |
| 222 |
| 223 IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, |
| 224 SetupGalleryChangedListenerWithoutWatchers) { |
| 225 chrome::EnsureMediaDirectoriesExists media_directories; |
| 226 const extensions::Extension* extension = |
| 227 LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); |
| 228 ASSERT_TRUE(extension); |
| 229 content::RenderViewHost* host = |
| 230 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 231 process_manager()->GetBackgroundHostForExtension(extension->id())-> |
| 232 render_view_host(); |
| 233 ASSERT_TRUE(host); |
| 234 |
| 235 // Get media file systems. |
| 236 ExtensionTestMessageListener get_media_systems_finished( |
| 237 kGetMediaFileSystemsCallbackOK, false /* no reply */); |
| 238 ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd, |
| 239 kGetMediaFileSystemsOK); |
| 240 EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied()); |
| 241 ASSERT_TRUE(media_directories.num_galleries() != 0); |
| 242 |
| 243 // Add gallery watch listener. |
| 244 ExecuteCmdAndCheckReply(host, kAddGalleryChangedListenerCmd, |
| 245 kAddGalleryChangedListenerOK); |
| 246 |
| 247 // Modify gallery contents. Listener should not get called because add watch |
| 248 // request was not called. |
| 249 ExtensionTestMessageListener music_gallery_change_event_received( |
| 250 kGalleryChangedEventReceived, false /* no reply */); |
| 251 EXPECT_TRUE(media_directories.AddNewFileInGallery(chrome::DIR_USER_MUSIC)); |
| 252 |
| 253 // Remove gallery watch listener. |
| 254 ExecuteCmdAndCheckReply(host, kRemoveGalleryChangedListenerCmd, |
| 255 kRemoveGalleryChangedListenerOK); |
| 256 } |
| 257 |
| 258 IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, |
| 259 SetupWatchOnInvalidGallery) { |
| 260 const extensions::Extension* extension = |
| 261 LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); |
| 262 ASSERT_TRUE(extension); |
| 263 content::RenderViewHost* host = |
| 264 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 265 process_manager()->GetBackgroundHostForExtension(extension->id())-> |
| 266 render_view_host(); |
| 267 ASSERT_TRUE(host); |
| 268 |
| 269 // Set up a invalid gallery watch. |
| 270 ExtensionTestMessageListener invalid_gallery_watch_request_finished( |
| 271 kAddGalleryWatchRequestFailed, false /* no reply */); |
| 272 ExecuteCmdAndCheckReply(host, kSetupWatchOnInvalidGalleryCmd, |
| 273 kAddGalleryWatchOK); |
| 274 EXPECT_TRUE(invalid_gallery_watch_request_finished.WaitUntilSatisfied()); |
| 275 } |
| 276 #endif |
| 277 |
| 278 #if !defined(OS_WIN) |
| 279 // Gallery watch request is not enabled on non-windows platforms. |
| 280 // Please refer to crbug.com/144491. |
| 281 IN_PROC_BROWSER_TEST_F(MediaGalleriesPrivateGalleryWatchApiTest, |
| 282 SetupGalleryWatch) { |
| 283 chrome::EnsureMediaDirectoriesExists media_directories; |
| 284 const extensions::Extension* extension = |
| 285 LoadExtension(test_data_dir_.AppendASCII(kTestExtensionPath)); |
| 286 ASSERT_TRUE(extension); |
| 287 content::RenderViewHost* host = |
| 288 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 289 process_manager()->GetBackgroundHostForExtension(extension->id())-> |
| 290 render_view_host(); |
| 291 ASSERT_TRUE(host); |
| 292 |
| 293 // Get media file systems. |
| 294 ExtensionTestMessageListener get_media_systems_finished( |
| 295 kGetMediaFileSystemsCallbackOK, false /* no reply */); |
| 296 ExecuteCmdAndCheckReply(host, kGetMediaFileSystemsCmd, |
| 297 kGetMediaFileSystemsOK); |
| 298 EXPECT_TRUE(get_media_systems_finished.WaitUntilSatisfied()); |
| 299 ASSERT_TRUE(media_directories.num_galleries() != 0); |
| 300 |
| 301 // Set up a invalid gallery watch. |
| 302 ExtensionTestMessageListener gallery_watch_request_finished( |
| 303 kAddGalleryWatchRequestFailed, false /* no reply */); |
| 304 // Set up gallery watch. |
| 305 ExecuteCmdAndCheckReply(host, kSetupWatchOnValidGalleriesCmd, |
| 306 kAddGalleryWatchOK); |
| 307 EXPECT_TRUE(gallery_watch_request_finished.WaitUntilSatisfied()); |
| 308 } |
| 309 #endif |
OLD | NEW |