Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(614)

Side by Side Diff: chrome/browser/extensions/api/media_galleries_private/media_galleries_watch_apitest.cc

Issue 11535008: Implement mediaGalleriesPrivate api to notify extensions about gallery changed events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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_recevied";
Lei Zhang 2012/12/18 00:47:01 typo
kmadhusu 2012/12/18 21:32:39 Fixed.
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) {
Lei Zhang 2012/12/18 00:47:01 Calls to this should ASSERT_TRUE().
kmadhusu 2012/12/18 21:32:39 Done.
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 PathService::Get(gallery_directory_key, &gallery_dir);
Lei Zhang 2012/12/18 00:47:01 Check return value here.
kmadhusu 2012/12/18 21:32:39 Done.
89 FilePath gallery_file =
90 gallery_dir.Append(FILE_PATH_LITERAL("test1.txt"));
91 std::string content("new content");
92 int write_size = file_util::WriteFile(gallery_file, content.c_str(),
93 content.length());
94 return (write_size == static_cast<int>(content.length()));
95 }
96
97 private:
98 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesPrivateGalleryWatchApiTest);
99 };
100
101
102 ///////////////////////////////////////////////////////////////////////////////
103 // TESTS //
104 ///////////////////////////////////////////////////////////////////////////////
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 EXPECT_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 EXPECT_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 EXPECT_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 EXPECT_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 EXPECT_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 EXPECT_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 EXPECT_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)
Lei Zhang 2012/12/18 00:47:01 Isn't lines 295-297 just #else ?
kmadhusu 2012/12/18 21:32:39 During some other review, reviewer said I should p
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698