media_galleries_apitest.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stringprintf.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_process_manager.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/platform_app_browsertest_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_test_util.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/storage_monitor/storage_info.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/storage_monitor/storage_monitor.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::PlatformAppBrowserTest; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Dummy device properties. 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceId[] = "testDeviceId"; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDeviceName[] = "foobar"; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("C:\\qux"); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::FilePath::CharType kDevicePath[] = FILE_PATH_LITERAL("/qux"); 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kTestGalleries[] = "testGalleries(%d)"; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExperimentalMediaGalleriesApiTest : public ExtensionApiTest { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionApiTest::SetUpCommandLine(command_line); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformAppMediaGalleriesBrowserTest : public PlatformAppBrowserTest { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since ExtensionTestMessageListener does not work with RunPlatformAppTest(), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This helper method can be used to run additional media gallery tests. 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RunSecondTestPhase(const string16& command) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = GetSingleLoadedExtension(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionHost* host = 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(browser()->profile())-> 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_manager()->GetBackgroundHostForExtension(extension->id()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(host); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host->render_view_host()->ExecuteJavascriptInWebFrame(string16(), command); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(catcher.GetNextResult()) << message_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AttachFakeDevice() { 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) device_id_ = chrome::StorageInfo::MakeDeviceId( 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM, kDeviceId); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::StorageMonitor::GetInstance()->receiver()->ProcessAttach( 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::StorageInfo(device_id_, ASCIIToUTF16(kDeviceName), kDevicePath, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) string16(), string16(), string16(), 0)); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DetachFakeDevice() { 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::StorageMonitor::GetInstance()->receiver()->ProcessDetach( 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) device_id_); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string device_id_; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppMediaGalleriesBrowserTest, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesNoAccess) { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::EnsureMediaDirectoriesExists media_directories; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("api_test/media_galleries/no_access")) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << message_; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunSecondTestPhase(UTF8ToUTF16(base::StringPrintf( 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kTestGalleries, media_directories.num_galleries()))); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppMediaGalleriesBrowserTest, NoGalleriesRead) { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::EnsureMediaDirectoriesExists media_directories; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("api_test/media_galleries/no_galleries")) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppMediaGalleriesBrowserTest, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesRead) { 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::EnsureMediaDirectoriesExists media_directories; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("api_test/media_galleries/read_access")) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunSecondTestPhase(UTF8ToUTF16(base::StringPrintf( 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kTestGalleries, media_directories.num_galleries()))); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppMediaGalleriesBrowserTest, 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MediaGalleriesAccessAttached) { 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::EnsureMediaDirectoriesExists media_directories; 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AttachFakeDevice(); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("api_test/media_galleries/access_attached")) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << message_; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RunSecondTestPhase(ASCIIToUTF16(base::StringPrintf( 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "testGalleries(%d, \"%s\")", 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) media_directories.num_galleries() + 1, kDeviceName))); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DetachFakeDevice(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppMediaGalleriesBrowserTest, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetFilesystemMetadata) { 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::EnsureMediaDirectoriesExists media_directories; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(RunPlatformAppTest("api_test/media_galleries/metadata")) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << message_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExperimentalMediaGalleriesApiTest, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExperimentalMediaGalleries) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("media_galleries/experimental")) << message_; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 133