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.
5 #include "xwalk/runtime/common/xwalk_paths.h"
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"
15 #include "base/base_paths_win.h"
16 #elif defined(OS_LINUX)
17 #include "base/environment.h"
18 #include "base/nix/xdg_util.h"
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);
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");
38 xwalk_suffix = FILE_PATH_LITERAL("xwalk");
42 CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &cur));
43 cur = cur.Append(xwalk_suffix);
45 #elif defined(OS_TIZEN)
46 if (XWalkRunner::GetInstance()->is_running_as_service())
47 cur = GetConfigPath().Append(xwalk_suffix);
49 cur = base::FilePath("/opt/usr/apps");
51 #elif defined(OS_LINUX)
52 cur = GetConfigPath().Append(xwalk_suffix);
54 #elif defined(OS_MACOSX)
55 CHECK(PathService::Get(base::DIR_APP_DATA, &cur));
56 cur = cur.Append(xwalk_suffix);
59 NOTIMPLEMENTED() << "Unsupported OS platform.";
69 bool PathProvider(int key, base::FilePath* path) {
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))
77 cur = cur.Append(FILE_PATH_LITERAL("xwalk"));
78 cur = cur.Append(FILE_PATH_LITERAL("test"));
79 cur = cur.Append(FILE_PATH_LITERAL("data"));
81 case xwalk::DIR_WGT_STORAGE_PATH:
82 if (!GetXWalkDataPath(&cur))
84 cur = cur.Append(FILE_PATH_LITERAL("Widget Storage"));
93 void RegisterPathProvider() {
94 PathService::RegisterProvider(PathProvider, PATH_START, PATH_END);