17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// 5558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// SystemStorage eject API browser tests. 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/file_path.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/stringprintf.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/utf_string_conversions.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/extensions/api/system_storage/storage_api_test_util.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/extensions/extension_apitest.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/storage_info.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/storage_monitor.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/storage_monitor/test_storage_monitor.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/browser/render_view_host.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/test/test_utils.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/system_storage/storage_info_provider.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_manager.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h" 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace { 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)using extensions::test::TestStorageUnitInfo; 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)using extensions::test::kRemovableStorageData; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::StorageMonitor; 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using storage_monitor::TestStorageMonitor; 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass SystemStorageEjectApiTest : public ExtensionApiTest { 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch SystemStorageEjectApiTest() : monitor_(NULL) {} 36558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~SystemStorageEjectApiTest() {} 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected: 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE { 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) monitor_ = TestStorageMonitor::CreateForBrowserTests(); 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ExtensionApiTest::SetUpOnMainThread(); 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RenderViewHost* GetHost() { 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const extensions::Extension* extension = 46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LoadExtension(test_data_dir_.AppendASCII("system/storage_eject")); 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return extensions::ExtensionSystem::Get(browser()->profile())-> 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch process_manager()->GetBackgroundHostForExtension(extension->id())-> 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch render_view_host(); 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void ExecuteCmdAndCheckReply(content::RenderViewHost* host, 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& js_command, 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& ok_message) { 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExtensionTestMessageListener listener(ok_message, false); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16(js_command)); 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(listener.WaitUntilSatisfied()); 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Attach() { 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessAttach( 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::test::BuildStorageInfoFromTestStorageUnitInfo( 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kRemovableStorageData)); 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RunAllPendingInMessageLoop(); 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Detach() { 69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessDetach( 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kRemovableStorageData.device_id); 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RunAllPendingInMessageLoop(); 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch protected: 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestStorageMonitor* monitor_; 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 79558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DISALLOW_COPY_AND_ASSIGN(SystemStorageEjectApiTest); 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 83558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectTest) { 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RenderViewHost* host = GetHost(); 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecuteCmdAndCheckReply(host, "addAttachListener()", "add_attach_ok"); 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Attach / detach 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string expect_attach_msg = 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::StringPrintf("%s,%s", "attach_test_ok", 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kRemovableStorageData.name); 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExtensionTestMessageListener attach_finished_listener(expect_attach_msg, 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch false /* no reply */); 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Attach(); 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(attach_finished_listener.WaitUntilSatisfied()); 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecuteCmdAndCheckReply(host, "ejectTest()", "eject_ok"); 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(kRemovableStorageData.device_id, monitor_->ejected_device()); 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Detach(); 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 102558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectBadDeviceTest) { 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecuteCmdAndCheckReply(GetHost(), "ejectFailTest()", "eject_no_such_device"); 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("", monitor_->ejected_device()); 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 107