| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/shell_integration.h" | 5 #include "chrome/browser/shell_integration.h" |
| 6 | 6 |
| 7 #include <cstdlib> | 7 #include <cstdlib> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 #else // CHROMIUM_BUILD | 112 #else // CHROMIUM_BUILD |
| 113 const char kTemplateFilename[] = "chromium-browser.desktop"; | 113 const char kTemplateFilename[] = "chromium-browser.desktop"; |
| 114 #endif | 114 #endif |
| 115 | 115 |
| 116 const char kTestData1[] = "a magical testing string"; | 116 const char kTestData1[] = "a magical testing string"; |
| 117 const char kTestData2[] = "a different testing string"; | 117 const char kTestData2[] = "a different testing string"; |
| 118 | 118 |
| 119 MessageLoop message_loop; | 119 MessageLoop message_loop; |
| 120 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); | 120 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); |
| 121 | 121 |
| 122 // Test that it searches $XDG_DATA_HOME/applications. |
| 122 { | 123 { |
| 123 base::ScopedTempDir temp_dir; | 124 base::ScopedTempDir temp_dir; |
| 124 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 125 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 125 | 126 |
| 126 MockEnvironment env; | 127 MockEnvironment env; |
| 127 env.Set("XDG_DATA_HOME", temp_dir.path().value()); | 128 env.Set("XDG_DATA_HOME", temp_dir.path().value()); |
| 129 // Create a file in a non-applications directory. This should be ignored. |
| 128 ASSERT_TRUE(file_util::WriteFile( | 130 ASSERT_TRUE(file_util::WriteFile( |
| 129 temp_dir.path().AppendASCII(kTemplateFilename), | 131 temp_dir.path().AppendASCII(kTemplateFilename), |
| 132 kTestData2, strlen(kTestData2))); |
| 133 ASSERT_TRUE(file_util::CreateDirectory( |
| 134 temp_dir.path().AppendASCII("applications"))); |
| 135 ASSERT_TRUE(file_util::WriteFile( |
| 136 temp_dir.path().AppendASCII("applications") |
| 137 .AppendASCII(kTemplateFilename), |
| 130 kTestData1, strlen(kTestData1))); | 138 kTestData1, strlen(kTestData1))); |
| 131 std::string contents; | 139 std::string contents; |
| 132 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, | 140 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, |
| 141 &contents)); |
| 142 EXPECT_EQ(kTestData1, contents); |
| 143 } |
| 144 |
| 145 // Test that it falls back to $HOME/.local/share/applications. |
| 146 { |
| 147 base::ScopedTempDir temp_dir; |
| 148 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 149 |
| 150 MockEnvironment env; |
| 151 env.Set("HOME", temp_dir.path().value()); |
| 152 ASSERT_TRUE(file_util::CreateDirectory( |
| 153 temp_dir.path().AppendASCII(".local/share/applications"))); |
| 154 ASSERT_TRUE(file_util::WriteFile( |
| 155 temp_dir.path().AppendASCII(".local/share/applications") |
| 156 .AppendASCII(kTemplateFilename), |
| 157 kTestData1, strlen(kTestData1))); |
| 158 std::string contents; |
| 159 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, |
| 133 &contents)); | 160 &contents)); |
| 134 EXPECT_EQ(kTestData1, contents); | 161 EXPECT_EQ(kTestData1, contents); |
| 135 } | 162 } |
| 136 | 163 |
| 164 // Test that it searches $XDG_DATA_DIRS/applications. |
| 137 { | 165 { |
| 138 base::ScopedTempDir temp_dir; | 166 base::ScopedTempDir temp_dir; |
| 139 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 167 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 140 | 168 |
| 141 MockEnvironment env; | 169 MockEnvironment env; |
| 142 env.Set("XDG_DATA_DIRS", temp_dir.path().value()); | 170 env.Set("XDG_DATA_DIRS", temp_dir.path().value()); |
| 143 ASSERT_TRUE(file_util::CreateDirectory( | 171 ASSERT_TRUE(file_util::CreateDirectory( |
| 144 temp_dir.path().AppendASCII("applications"))); | 172 temp_dir.path().AppendASCII("applications"))); |
| 145 ASSERT_TRUE(file_util::WriteFile( | 173 ASSERT_TRUE(file_util::WriteFile( |
| 146 temp_dir.path().AppendASCII("applications") | 174 temp_dir.path().AppendASCII("applications") |
| 147 .AppendASCII(kTemplateFilename), | 175 .AppendASCII(kTemplateFilename), |
| 148 kTestData2, strlen(kTestData2))); | 176 kTestData2, strlen(kTestData2))); |
| 149 std::string contents; | 177 std::string contents; |
| 150 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, | 178 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, |
| 151 &contents)); | 179 &contents)); |
| 152 EXPECT_EQ(kTestData2, contents); | 180 EXPECT_EQ(kTestData2, contents); |
| 153 } | 181 } |
| 154 | 182 |
| 183 // Test that it searches $X/applications for each X in $XDG_DATA_DIRS. |
| 155 { | 184 { |
| 156 base::ScopedTempDir temp_dir; | 185 base::ScopedTempDir temp_dir1; |
| 157 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 186 ASSERT_TRUE(temp_dir1.CreateUniqueTempDir()); |
| 187 base::ScopedTempDir temp_dir2; |
| 188 ASSERT_TRUE(temp_dir2.CreateUniqueTempDir()); |
| 158 | 189 |
| 159 MockEnvironment env; | 190 MockEnvironment env; |
| 160 env.Set("XDG_DATA_DIRS", temp_dir.path().value() + ":" + | 191 env.Set("XDG_DATA_DIRS", temp_dir1.path().value() + ":" + |
| 161 temp_dir.path().AppendASCII("applications").value()); | 192 temp_dir2.path().value()); |
| 193 // Create a file in a non-applications directory. This should be ignored. |
| 194 ASSERT_TRUE(file_util::WriteFile( |
| 195 temp_dir1.path().AppendASCII(kTemplateFilename), |
| 196 kTestData1, strlen(kTestData1))); |
| 197 // Only create a findable desktop file in the second path. |
| 162 ASSERT_TRUE(file_util::CreateDirectory( | 198 ASSERT_TRUE(file_util::CreateDirectory( |
| 163 temp_dir.path().AppendASCII("applications"))); | 199 temp_dir2.path().AppendASCII("applications"))); |
| 164 ASSERT_TRUE(file_util::WriteFile( | 200 ASSERT_TRUE(file_util::WriteFile( |
| 165 temp_dir.path().AppendASCII(kTemplateFilename), | 201 temp_dir2.path().AppendASCII("applications") |
| 166 kTestData1, strlen(kTestData1))); | |
| 167 ASSERT_TRUE(file_util::WriteFile( | |
| 168 temp_dir.path().AppendASCII("applications") | |
| 169 .AppendASCII(kTemplateFilename), | 202 .AppendASCII(kTemplateFilename), |
| 170 kTestData2, strlen(kTestData2))); | 203 kTestData2, strlen(kTestData2))); |
| 171 std::string contents; | 204 std::string contents; |
| 172 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, | 205 ASSERT_TRUE(ShellIntegrationLinux::GetDesktopShortcutTemplate(&env, |
| 173 &contents)); | 206 &contents)); |
| 174 EXPECT_EQ(kTestData1, contents); | 207 EXPECT_EQ(kTestData2, contents); |
| 175 } | 208 } |
| 176 } | 209 } |
| 177 | 210 |
| 178 TEST(ShellIntegrationTest, GetWebShortcutFilename) { | 211 TEST(ShellIntegrationTest, GetWebShortcutFilename) { |
| 179 const struct { | 212 const struct { |
| 180 const base::FilePath::CharType* path; | 213 const base::FilePath::CharType* path; |
| 181 const char* url; | 214 const char* url; |
| 182 } test_cases[] = { | 215 } test_cases[] = { |
| 183 { FPL("http___foo_.desktop"), "http://foo" }, | 216 { FPL("http___foo_.desktop"), "http://foo" }, |
| 184 { FPL("http___foo_bar_.desktop"), "http://foo/bar/" }, | 217 { FPL("http___foo_bar_.desktop"), "http://foo/bar/" }, |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 web_app::GenerateApplicationNameFromURL(GURL(test_cases[i].url)), | 441 web_app::GenerateApplicationNameFromURL(GURL(test_cases[i].url)), |
| 409 GURL(test_cases[i].url), | 442 GURL(test_cases[i].url), |
| 410 "", | 443 "", |
| 411 base::FilePath(), | 444 base::FilePath(), |
| 412 ASCIIToUTF16(test_cases[i].title), | 445 ASCIIToUTF16(test_cases[i].title), |
| 413 test_cases[i].icon_name, | 446 test_cases[i].icon_name, |
| 414 base::FilePath())); | 447 base::FilePath())); |
| 415 } | 448 } |
| 416 } | 449 } |
| 417 #endif | 450 #endif |
| OLD | NEW |