Skip to content

Commit

Permalink
Linux: Update desktop environment detection to include MATE desktop.
Browse files Browse the repository at this point in the history
MATE is a fork of GNOME and should be treated as GNOME.

Also update KDE detection heuristics.

BUG=115567

Review URL: https://codereview.chromium.org/838043002

Cr-Commit-Position: refs/heads/master@{#310469}
  • Loading branch information
leizleiz authored and Commit bot committed Jan 8, 2015
1 parent 9c5c056 commit c3f9236
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 24 deletions.
10 changes: 6 additions & 4 deletions base/nix/xdg_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ FilePath GetXDGDirectory(Environment* env, const char* env_name,
if (env->GetVar(env_name, &env_value) && !env_value.empty()) {
path = FilePath(env_value);
} else {
PathService::Get(base::DIR_HOME, &path);
PathService::Get(DIR_HOME, &path);
path = path.Append(fallback_dir);
}
return path.StripTrailingSeparators();
Expand All @@ -46,7 +46,7 @@ FilePath GetXDGUserDirectory(const char* dir_name, const char* fallback_dir) {
path = FilePath(xdg_dir);
free(xdg_dir);
} else {
PathService::Get(base::DIR_HOME, &path);
PathService::Get(DIR_HOME, &path);
path = path.Append(fallback_dir);
}
return path.StripTrailingSeparators();
Expand All @@ -68,15 +68,17 @@ DesktopEnvironment GetDesktopEnvironment(Environment* env) {
return DESKTOP_ENVIRONMENT_UNITY;
} else if (xdg_current_desktop == "GNOME") {
return DESKTOP_ENVIRONMENT_GNOME;
} else if (xdg_current_desktop == "KDE") {
return DESKTOP_ENVIRONMENT_KDE4;
}
}

// DESKTOP_SESSION was what everyone used in 2010.
std::string desktop_session;
if (env->GetVar("DESKTOP_SESSION", &desktop_session)) {
if (desktop_session == "gnome") {
if (desktop_session == "gnome" || desktop_session =="mate") {
return DESKTOP_ENVIRONMENT_GNOME;
} else if (desktop_session == "kde4") {
} else if (desktop_session == "kde4" || desktop_session == "kde-plasma") {
return DESKTOP_ENVIRONMENT_KDE4;
} else if (desktop_session == "kde") {
// This may mean KDE4 on newer systems, so we have to check.
Expand Down
93 changes: 73 additions & 20 deletions base/nix/xdg_util_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,51 +25,104 @@ class MockEnvironment : public Environment {
MOCK_METHOD1(UnSetVar, bool(const char*));
};

const char* const kGnome = "gnome";
const char* const kKDE4 = "kde4";
const char* const kKDE = "kde";
const char* const kXFCE = "xfce";
// Needs to be const char* to make gmock happy.
const char* const kDesktopGnome = "gnome";
const char* const kDesktopGnomeFallback = "gnome-fallback";
const char* const kDesktopMATE = "mate";
const char* const kDesktopKDE4 = "kde4";
const char* const kDesktopKDE = "kde";
const char* const kDesktopXFCE = "xfce";
const char* const kXdgDesktopGNOME = "GNOME";
const char* const kXdgDesktopKDE = "KDE";
const char* const kXdgDesktopUnity = "Unity";

const char kDesktopSession[] = "DESKTOP_SESSION";
const char kXdgDesktop[] = "XDG_CURRENT_DESKTOP";

} // namespace

TEST(XDGUtilTest, GetDesktopEnvironmentGnome) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq("DESKTOP_SESSION"), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kGnome), Return(true)));
EXPECT_CALL(getter, GetVar(StrEq(kDesktopSession), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kDesktopGnome), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME,
GetDesktopEnvironment(&getter));
EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetDesktopEnvironmentMATE) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq(kDesktopSession), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kDesktopMATE), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetDesktopEnvironmentKDE4) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq("DESKTOP_SESSION"), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kKDE4), Return(true)));
EXPECT_CALL(getter, GetVar(StrEq(kDesktopSession), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kDesktopKDE4), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4,
GetDesktopEnvironment(&getter));
EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetDesktopEnvironmentKDE3) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq("DESKTOP_SESSION"), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kKDE), Return(true)));
EXPECT_CALL(getter, GetVar(StrEq(kDesktopSession), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kDesktopKDE), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE3,
GetDesktopEnvironment(&getter));
EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE3, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetDesktopEnvironmentXFCE) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq("DESKTOP_SESSION"), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kXFCE), Return(true)));
EXPECT_CALL(getter, GetVar(StrEq(kDesktopSession), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kDesktopXFCE), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_XFCE, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetXdgDesktopGnome) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq(kXdgDesktop), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kXdgDesktopGNOME), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetXdgDesktopGnomeFallback) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq(kXdgDesktop), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kXdgDesktopUnity), Return(true)));
EXPECT_CALL(getter, GetVar(StrEq(kDesktopSession), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kDesktopGnomeFallback),
Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetXdgDesktopKDE4) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq(kXdgDesktop), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kXdgDesktopKDE), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4, GetDesktopEnvironment(&getter));
}

TEST(XDGUtilTest, GetXdgDesktopUnity) {
MockEnvironment getter;
EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
EXPECT_CALL(getter, GetVar(StrEq(kXdgDesktop), _))
.WillOnce(DoAll(SetArgumentPointee<1>(kXdgDesktopUnity), Return(true)));

EXPECT_EQ(DESKTOP_ENVIRONMENT_XFCE,
GetDesktopEnvironment(&getter));
EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
}

} // namespace nix
Expand Down

0 comments on commit c3f9236

Please sign in to comment.