Index: chrome/browser/shell_integration_unittest.cc |
diff --git a/chrome/browser/shell_integration_unittest.cc b/chrome/browser/shell_integration_unittest.cc |
index 6f0d71d3f9c8dbed716284f9e9a4c0703a00e31a..3b01c30ed746c94978e94d6f38c90de43f32e3ba 100644 |
--- a/chrome/browser/shell_integration_unittest.cc |
+++ b/chrome/browser/shell_integration_unittest.cc |
@@ -44,7 +44,7 @@ TEST(ShellIntegrationTest, GetDesktopFileContents) { |
const char* expected_output; |
} test_cases[] = { |
// Dumb case. |
- { "ignored", "ignored", "", "" }, |
+ { "ignored", "ignored", "", "#!/usr/bin/env xdg-open\n" }, |
// Real-world case. |
{ "http://gmail.com", |
@@ -62,6 +62,7 @@ TEST(ShellIntegrationTest, GetDesktopFileContents) { |
"Categories=Application;Network;WebBrowser;\n" |
"MimeType=text/html;text/xml;application/xhtml_xml;\n", |
+ "#!/usr/bin/env xdg-open\n" |
"[Desktop Entry]\n" |
"Version=1.0\n" |
"Encoding=UTF-8\n" |
@@ -74,6 +75,32 @@ TEST(ShellIntegrationTest, GetDesktopFileContents) { |
"MimeType=text/html;text/xml;application/xhtml_xml;\n" |
}, |
+ // Make sure we don't insert duplicate shebangs. |
+ { "http://gmail.com", |
+ "GMail", |
+ |
+ "#!/some/shebang\n" |
+ "Name=Google Chrome\n" |
+ "Exec=/opt/google/chrome/google-chrome %U\n", |
+ |
+ "#!/usr/bin/env xdg-open\n" |
+ "Name=GMail\n" |
+ "Exec=/opt/google/chrome/google-chrome \"--app=http://gmail.com/\"\n" |
+ }, |
+ |
+ // Make sure i18n-ed comments are removed. |
+ { "http://gmail.com", |
+ "GMail", |
+ |
+ "Name=Google Chrome\n" |
+ "Exec=/opt/google/chrome/google-chrome %U\n" |
+ "Comment[pl]=Jakis komentarz.\n", |
+ |
+ "#!/usr/bin/env xdg-open\n" |
+ "Name=GMail\n" |
+ "Exec=/opt/google/chrome/google-chrome \"--app=http://gmail.com/\"\n" |
+ }, |
+ |
// Now we're starting to be more evil... |
{ "http://evil.com/evil --join-the-b0tnet", |
"Ownz0red\nExec=rm -rf /", |
@@ -81,10 +108,35 @@ TEST(ShellIntegrationTest, GetDesktopFileContents) { |
"Name=Google Chrome\n" |
"Exec=/opt/google/chrome/google-chrome %U\n", |
+ "#!/usr/bin/env xdg-open\n" |
"Name=http://evil.com/evil%20--join-the-b0tnet\n" |
"Exec=/opt/google/chrome/google-chrome " |
"\"--app=http://evil.com/evil%%20--join-the-b0tnet\"\n" |
}, |
+ { "http://evil.com/evil; rm -rf /; \"; rm -rf $HOME >ownz0red", |
+ "Innocent Title", |
+ |
+ "Name=Google Chrome\n" |
+ "Exec=/opt/google/chrome/google-chrome %U\n", |
+ |
+ "#!/usr/bin/env xdg-open\n" |
+ "Name=Innocent Title\n" |
+ "Exec=/opt/google/chrome/google-chrome " |
+ "\"--app=http://evil.com/evil%%20rm%%20-rf%%20/%%20%%22%%20rm%%20" |
+ "-rf%%20HOME%%20%%3Eownz0red\"\n" |
+ }, |
+ { "http://evil.com/evil | cat `echo ownz0red` >/dev/null\\", |
+ "Innocent Title", |
+ |
+ "Name=Google Chrome\n" |
+ "Exec=/opt/google/chrome/google-chrome %U\n", |
+ |
+ "#!/usr/bin/env xdg-open\n" |
+ "Name=Innocent Title\n" |
+ "Exec=/opt/google/chrome/google-chrome " |
+ "\"--app=http://evil.com/evil%%20%%7C%%20cat%%20%%60echo%%20ownz0red" |
+ "%%60%%20%%3E/dev/null/\"\n" |
+ }, |
}; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); i++) { |
EXPECT_EQ(test_cases[i].expected_output, |