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