Upstream version 5.34.104.0
[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_test_message_listener.h"
14 #include "components/storage_monitor/storage_info.h"
15 #include "components/storage_monitor/storage_monitor.h"
16 #include "components/storage_monitor/test_storage_monitor.h"
17 #include "content/public/browser/render_view_host.h"
18 #include "content/public/test/test_utils.h"
19 #include "extensions/browser/extension_system.h"
20 #include "extensions/browser/process_manager.h"
21 #include "extensions/common/extension.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(base::string16(),
54                                       base::ASCIIToUTF16(js_command));
55     EXPECT_TRUE(listener.WaitUntilSatisfied());
56   }
57
58   void Attach() {
59     DCHECK(StorageMonitor::GetInstance()->IsInitialized());
60     StorageMonitor::GetInstance()->receiver()->ProcessAttach(
61         extensions::test::BuildStorageInfoFromTestStorageUnitInfo(
62             kRemovableStorageData));
63     content::RunAllPendingInMessageLoop();
64   }
65
66   void Detach() {
67     DCHECK(StorageMonitor::GetInstance()->IsInitialized());
68     StorageMonitor::GetInstance()->receiver()->ProcessDetach(
69         kRemovableStorageData.device_id);
70     content::RunAllPendingInMessageLoop();
71   }
72
73  protected:
74   TestStorageMonitor* monitor_;
75
76  private:
77   DISALLOW_COPY_AND_ASSIGN(SystemStorageEjectApiTest);
78 };
79
80
81 IN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectTest) {
82   content::RenderViewHost* host = GetHost();
83   ExecuteCmdAndCheckReply(host, "addAttachListener()", "add_attach_ok");
84
85   // Attach / detach
86   const std::string expect_attach_msg =
87       base::StringPrintf("%s,%s", "attach_test_ok",
88                          kRemovableStorageData.name);
89   ExtensionTestMessageListener attach_finished_listener(expect_attach_msg,
90                                                         false  /* no reply */);
91   Attach();
92   EXPECT_TRUE(attach_finished_listener.WaitUntilSatisfied());
93
94   ExecuteCmdAndCheckReply(host, "ejectTest()", "eject_ok");
95   EXPECT_EQ(kRemovableStorageData.device_id, monitor_->ejected_device());
96
97   Detach();
98 }
99
100 IN_PROC_BROWSER_TEST_F(SystemStorageEjectApiTest, EjectBadDeviceTest) {
101   ExecuteCmdAndCheckReply(GetHost(), "ejectFailTest()", "eject_no_such_device");
102
103   EXPECT_EQ("", monitor_->ejected_device());
104 }