- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / system_storage / system_storage_eject_apitest.cc
1 // Copyright 2013 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 // SystemStorage eject API browser tests.
6
7 #include "base/files/file_path.h"
8 #include "base/strings/stringprintf.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/extensions/api/system_storage/storage_api_test_util.h"
11 #include "chrome/browser/extensions/api/system_storage/storage_info_provider.h"
12 #include "chrome/browser/extensions/extension_apitest.h"
13 #include "chrome/browser/extensions/extension_process_manager.h"
14 #include "chrome/browser/extensions/extension_system.h"
15 #include "chrome/browser/extensions/extension_test_message_listener.h"
16 #include "chrome/browser/storage_monitor/storage_info.h"
17 #include "chrome/browser/storage_monitor/storage_monitor.h"
18 #include "chrome/browser/storage_monitor/test_storage_monitor.h"
19 #include "chrome/common/extensions/extension.h"
20 #include "content/public/browser/render_view_host.h"
21 #include "content/public/test/test_utils.h"
22
23 namespace {
24
25 using extensions::test::TestStorageUnitInfo;
26 using extensions::test::kRemovableStorageData;
27
28 }  // namespace
29
30 class SystemStorageEjectApiTest : public ExtensionApiTest {
31  public:
32   SystemStorageEjectApiTest() : monitor_(NULL) {}
33   virtual ~SystemStorageEjectApiTest() {}
34
35  protected:
36   virtual void SetUpOnMainThread() OVERRIDE {
37     monitor_ = TestStorageMonitor::CreateForBrowserTests();
38     ExtensionApiTest::SetUpOnMainThread();
39   }
40
41   content::RenderViewHost* GetHost() {
42     const extensions::Extension* extension =
43         LoadExtension(test_data_dir_.AppendASCII("system/storage_eject"));
44     return extensions::ExtensionSystem::Get(browser()->profile())->
45         process_manager()->GetBackgroundHostForExtension(extension->id())->
46             render_view_host();
47   }
48
49   void ExecuteCmdAndCheckReply(content::RenderViewHost* host,
50                                const std::string& js_command,
51                                const std::string& ok_message) {
52     ExtensionTestMessageListener listener(ok_message, false);
53     host->ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(js_command));
54     EXPECT_TRUE(listener.WaitUntilSatisfied());
55   }
56
57   void Attach() {
58     DCHECK(StorageMonitor::GetInstance()->IsInitialized());
59     StorageMonitor::GetInstance()->receiver()->ProcessAttach(
60         extensions::test::BuildStorageInfoFromTestStorageUnitInfo(
61             kRemovableStorageData));
62     content::RunAllPendingInMessageLoop();
63   }
64
65   void Detach() {
66     DCHECK(StorageMonitor::GetInstance()->IsInitialized());
67     StorageMonitor::GetInstance()->receiver()->ProcessDetach(
68         kRemovableStorageData.device_id);
69     content::RunAllPendingInMessageLoop();
70   }
71
72  protected:
73   TestStorageMonitor* monitor_;
74
75  private:
76   DISALLOW_COPY_AND_ASSIGN(SystemStorageEjectApiTest);
77 };
78
79
80 IN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectTest) {
81   content::RenderViewHost* host = GetHost();
82   ExecuteCmdAndCheckReply(host, "addAttachListener()", "add_attach_ok");
83
84   // Attach / detach
85   const std::string expect_attach_msg =
86       base::StringPrintf("%s,%s", "attach_test_ok",
87                          kRemovableStorageData.name);
88   ExtensionTestMessageListener attach_finished_listener(expect_attach_msg,
89                                                         false  /* no reply */);
90   Attach();
91   EXPECT_TRUE(attach_finished_listener.WaitUntilSatisfied());
92
93   ExecuteCmdAndCheckReply(host, "ejectTest()", "eject_ok");
94   EXPECT_EQ(kRemovableStorageData.device_id, monitor_->ejected_device());
95
96   Detach();
97 }
98
99 IN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectBadDeviceTest) {
100   ExecuteCmdAndCheckReply(GetHost(), "ejectFailTest()", "eject_no_such_device");
101
102   EXPECT_EQ("", monitor_->ejected_device());
103 }