system_storage_eject_apitest.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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" 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/extensions/api/system_storage/storage_info_provider.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/extensions/extension_apitest.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/extensions/extension_process_manager.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/extensions/extension_system.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/extensions/extension_test_message_listener.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/storage_monitor/storage_info.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/storage_monitor/storage_monitor.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/storage_monitor/test_storage_monitor.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/extensions/extension.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/browser/render_view_host.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/test/test_utils.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace { 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)using extensions::test::TestStorageUnitInfo; 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)using extensions::test::kRemovableStorageData; 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass SystemStorageEjectApiTest : public ExtensionApiTest { 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch SystemStorageEjectApiTest() : monitor_(NULL) {} 33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~SystemStorageEjectApiTest() {} 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected: 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE { 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) monitor_ = TestStorageMonitor::CreateForBrowserTests(); 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ExtensionApiTest::SetUpOnMainThread(); 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RenderViewHost* GetHost() { 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const extensions::Extension* extension = 43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LoadExtension(test_data_dir_.AppendASCII("system/storage_eject")); 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return extensions::ExtensionSystem::Get(browser()->profile())-> 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch process_manager()->GetBackgroundHostForExtension(extension->id())-> 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch render_view_host(); 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void ExecuteCmdAndCheckReply(content::RenderViewHost* host, 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& js_command, 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& ok_message) { 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExtensionTestMessageListener listener(ok_message, false); 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch host->ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(js_command)); 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(listener.WaitUntilSatisfied()); 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Attach() { 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessAttach( 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions::test::BuildStorageInfoFromTestStorageUnitInfo( 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kRemovableStorageData)); 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RunAllPendingInMessageLoop(); 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Detach() { 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) StorageMonitor::GetInstance()->receiver()->ProcessDetach( 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kRemovableStorageData.device_id); 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RunAllPendingInMessageLoop(); 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch protected: 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestStorageMonitor* monitor_; 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DISALLOW_COPY_AND_ASSIGN(SystemStorageEjectApiTest); 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 80558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectTest) { 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RenderViewHost* host = GetHost(); 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecuteCmdAndCheckReply(host, "addAttachListener()", "add_attach_ok"); 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Attach / detach 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string expect_attach_msg = 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::StringPrintf("%s,%s", "attach_test_ok", 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) kRemovableStorageData.name); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExtensionTestMessageListener attach_finished_listener(expect_attach_msg, 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch false /* no reply */); 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Attach(); 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(attach_finished_listener.WaitUntilSatisfied()); 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecuteCmdAndCheckReply(host, "ejectTest()", "eject_ok"); 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(kRemovableStorageData.device_id, monitor_->ejected_device()); 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Detach(); 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 99558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochIN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectBadDeviceTest) { 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecuteCmdAndCheckReply(GetHost(), "ejectFailTest()", "eject_no_such_device"); 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ("", monitor_->ejected_device()); 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 104