|
@@ -11,6 +11,7 @@
|
|
|
#include "base/environment.h"
|
|
|
#include "base/files/file_path.h"
|
|
|
#include "base/files/file_util.h"
|
|
|
+#include "base/optional.h"
|
|
|
#include "base/path_service.h"
|
|
|
#include "base/system/sys_info.h"
|
|
|
#include "chrome/browser/browser_process.h"
|
|
@@ -845,14 +846,14 @@ void App::SetAppPath(const base::FilePath& app_path) {
|
|
|
}
|
|
|
|
|
|
#if !defined(OS_MACOSX)
|
|
|
-void App::SetAppLogsPath(mate::Arguments* args) {
|
|
|
- base::FilePath custom_path;
|
|
|
- if (args->GetNext(&custom_path)) {
|
|
|
- if (!custom_path.IsAbsolute()) {
|
|
|
+void App::SetAppLogsPath(base::Optional<base::FilePath> custom_path,
|
|
|
+ mate::Arguments* args) {
|
|
|
+ if (custom_path.has_value()) {
|
|
|
+ if (!custom_path->IsAbsolute()) {
|
|
|
args->ThrowError("Path must be absolute");
|
|
|
return;
|
|
|
}
|
|
|
- base::PathService::Override(DIR_APP_LOGS, custom_path);
|
|
|
+ base::PathService::Override(DIR_APP_LOGS, custom_path.value());
|
|
|
} else {
|
|
|
base::FilePath path;
|
|
|
if (base::PathService::Get(DIR_USER_DATA, &path)) {
|
|
@@ -867,18 +868,22 @@ void App::SetAppLogsPath(mate::Arguments* args) {
|
|
|
base::FilePath App::GetPath(mate::Arguments* args, const std::string& name) {
|
|
|
bool succeed = false;
|
|
|
base::FilePath path;
|
|
|
+
|
|
|
int key = GetPathConstant(name);
|
|
|
- if (key >= 0)
|
|
|
+ if (key >= 0) {
|
|
|
succeed = base::PathService::Get(key, &path);
|
|
|
- if (!succeed) {
|
|
|
- if (name == "logs") {
|
|
|
- args->ThrowError("Failed to get '" + name +
|
|
|
- "' path: setAppLogsPath() must be called first.");
|
|
|
- } else {
|
|
|
- args->ThrowError("Failed to get '" + name + "' path");
|
|
|
+ // If users try to get the logs path before setting a logs path,
|
|
|
+ // set the path to a sensible default and then try to get it again
|
|
|
+ if (!succeed && name == "logs") {
|
|
|
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
|
|
|
+ SetAppLogsPath(base::Optional<base::FilePath>(), args);
|
|
|
+ succeed = base::PathService::Get(key, &path);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (!succeed)
|
|
|
+ args->ThrowError("Failed to get '" + name + "' path");
|
|
|
+
|
|
|
return path;
|
|
|
}
|
|
|
|