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