Upstream version 6.34.113.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / common / xwalk_paths.cc
1 // Copyright (c) 2013 Intel Corporation. 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 #include "xwalk/runtime/common/xwalk_paths.h"
6
7 #include "base/file_util.h"
8 #include "base/files/file_path.h"
9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/path_service.h"
12 #include "xwalk/runtime/browser/xwalk_runner.h"
13
14 #if defined(OS_WIN)
15 #include "base/base_paths_win.h"
16 #elif defined(OS_LINUX)
17 #include "base/environment.h"
18 #include "base/nix/xdg_util.h"
19 #endif
20
21 namespace xwalk {
22
23 namespace {
24
25 #if defined(OS_LINUX)
26 base::FilePath GetConfigPath() {
27   scoped_ptr<base::Environment> env(base::Environment::Create());
28   return base::nix::GetXDGDirectory(
29       env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
30 }
31 #endif
32
33 bool GetXWalkDataPath(base::FilePath* path) {
34   base::FilePath::StringType xwalk_suffix;
35   if (XWalkRunner::GetInstance()->is_running_as_service())
36     xwalk_suffix = FILE_PATH_LITERAL("xwalk-service");
37   else
38     xwalk_suffix = FILE_PATH_LITERAL("xwalk");
39   base::FilePath cur;
40
41 #if defined(OS_WIN)
42   CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &cur));
43   cur = cur.Append(xwalk_suffix);
44
45 #elif defined(OS_TIZEN)
46   if (XWalkRunner::GetInstance()->is_running_as_service())
47     cur = GetConfigPath().Append(xwalk_suffix);
48   else
49     cur = base::FilePath("/opt/usr/apps");
50
51 #elif defined(OS_LINUX)
52   cur = GetConfigPath().Append(xwalk_suffix);
53
54 #elif defined(OS_MACOSX)
55   CHECK(PathService::Get(base::DIR_APP_DATA, &cur));
56   cur = cur.Append(xwalk_suffix);
57
58 #else
59   NOTIMPLEMENTED() << "Unsupported OS platform.";
60   return false;
61 #endif
62
63   *path = cur;
64   return true;
65 }
66
67 }  // namespace
68
69 bool PathProvider(int key, base::FilePath* path) {
70   base::FilePath cur;
71   switch (key) {
72     case xwalk::DIR_DATA_PATH:
73       return GetXWalkDataPath(path);
74     case xwalk::DIR_TEST_DATA:
75       if (!PathService::Get(base::DIR_SOURCE_ROOT, &cur))
76         return false;
77       cur = cur.Append(FILE_PATH_LITERAL("xwalk"));
78       cur = cur.Append(FILE_PATH_LITERAL("test"));
79       cur = cur.Append(FILE_PATH_LITERAL("data"));
80       break;
81     case xwalk::DIR_WGT_STORAGE_PATH:
82       if (!GetXWalkDataPath(&cur))
83         return false;
84       cur = cur.Append(FILE_PATH_LITERAL("Widget Storage"));
85       break;
86     default:
87       return false;
88   }
89   *path = cur;
90   return true;
91 }
92
93 void RegisterPathProvider() {
94   PathService::RegisterProvider(PathProvider, PATH_START, PATH_END);
95 }
96
97 }  // namespace xwalk
98