| 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_linux.h" | 5 #include "chrome/browser/shell_integration_linux.h" |
| 6 | 6 |
| 7 #include <fcntl.h> | 7 #include <fcntl.h> |
| 8 #include <glib.h> | 8 #include <glib.h> |
| 9 #include <stdlib.h> | 9 #include <stdlib.h> |
| 10 #include <sys/stat.h> | 10 #include <sys/stat.h> |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 545 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 546 | 546 |
| 547 base::FilePath shortcut_filename = GetExtensionShortcutFilename( | 547 base::FilePath shortcut_filename = GetExtensionShortcutFilename( |
| 548 profile_path, extension_id); | 548 profile_path, extension_id); |
| 549 DCHECK(!shortcut_filename.empty()); | 549 DCHECK(!shortcut_filename.empty()); |
| 550 ShellIntegration::ShortcutLocations locations; | 550 ShellIntegration::ShortcutLocations locations; |
| 551 | 551 |
| 552 // Determine whether there is a shortcut on desktop. | 552 // Determine whether there is a shortcut on desktop. |
| 553 if (!desktop_path.empty()) { | 553 if (!desktop_path.empty()) { |
| 554 locations.on_desktop = | 554 locations.on_desktop = |
| 555 file_util::PathExists(desktop_path.Append(shortcut_filename)); | 555 base::PathExists(desktop_path.Append(shortcut_filename)); |
| 556 } | 556 } |
| 557 | 557 |
| 558 // Determine whether there is a shortcut in the applications directory. | 558 // Determine whether there is a shortcut in the applications directory. |
| 559 std::string shortcut_contents; | 559 std::string shortcut_contents; |
| 560 if (GetExistingShortcutContents(env, shortcut_filename, &shortcut_contents)) { | 560 if (GetExistingShortcutContents(env, shortcut_filename, &shortcut_contents)) { |
| 561 // Whether this counts as "hidden" or "in_applications_menu" depends on | 561 // Whether this counts as "hidden" or "in_applications_menu" depends on |
| 562 // whether it contains NoDisplay=true. | 562 // whether it contains NoDisplay=true. |
| 563 if (GetNoDisplayFromDesktopFile(shortcut_contents)) | 563 if (GetNoDisplayFromDesktopFile(shortcut_contents)) |
| 564 locations.hidden = true; | 564 locations.hidden = true; |
| 565 else | 565 else |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 } | 598 } |
| 599 } else { | 599 } else { |
| 600 search_paths.push_back(base::FilePath("/usr/local/share")); | 600 search_paths.push_back(base::FilePath("/usr/local/share")); |
| 601 search_paths.push_back(base::FilePath("/usr/share")); | 601 search_paths.push_back(base::FilePath("/usr/share")); |
| 602 } | 602 } |
| 603 | 603 |
| 604 for (std::vector<base::FilePath>::const_iterator i = search_paths.begin(); | 604 for (std::vector<base::FilePath>::const_iterator i = search_paths.begin(); |
| 605 i != search_paths.end(); ++i) { | 605 i != search_paths.end(); ++i) { |
| 606 base::FilePath path = i->Append("applications").Append(desktop_filename); | 606 base::FilePath path = i->Append("applications").Append(desktop_filename); |
| 607 VLOG(1) << "Looking for desktop file in " << path.value(); | 607 VLOG(1) << "Looking for desktop file in " << path.value(); |
| 608 if (file_util::PathExists(path)) { | 608 if (base::PathExists(path)) { |
| 609 VLOG(1) << "Found desktop file at " << path.value(); | 609 VLOG(1) << "Found desktop file at " << path.value(); |
| 610 return file_util::ReadFileToString(path, output); | 610 return file_util::ReadFileToString(path, output); |
| 611 } | 611 } |
| 612 } | 612 } |
| 613 | 613 |
| 614 return false; | 614 return false; |
| 615 } | 615 } |
| 616 | 616 |
| 617 base::FilePath GetWebShortcutFilename(const GURL& url) { | 617 base::FilePath GetWebShortcutFilename(const GURL& url) { |
| 618 // Use a prefix, because xdg-desktop-menu requires it. | 618 // Use a prefix, because xdg-desktop-menu requires it. |
| 619 std::string filename = | 619 std::string filename = |
| 620 std::string(chrome::kBrowserProcessExecutableName) + "-" + url.spec(); | 620 std::string(chrome::kBrowserProcessExecutableName) + "-" + url.spec(); |
| 621 file_util::ReplaceIllegalCharactersInPath(&filename, '_'); | 621 file_util::ReplaceIllegalCharactersInPath(&filename, '_'); |
| 622 | 622 |
| 623 base::FilePath desktop_path; | 623 base::FilePath desktop_path; |
| 624 if (!PathService::Get(base::DIR_USER_DESKTOP, &desktop_path)) | 624 if (!PathService::Get(base::DIR_USER_DESKTOP, &desktop_path)) |
| 625 return base::FilePath(); | 625 return base::FilePath(); |
| 626 | 626 |
| 627 base::FilePath filepath = desktop_path.Append(filename); | 627 base::FilePath filepath = desktop_path.Append(filename); |
| 628 base::FilePath alternative_filepath(filepath.value() + ".desktop"); | 628 base::FilePath alternative_filepath(filepath.value() + ".desktop"); |
| 629 for (size_t i = 1; i < 100; ++i) { | 629 for (size_t i = 1; i < 100; ++i) { |
| 630 if (file_util::PathExists(base::FilePath(alternative_filepath))) { | 630 if (base::PathExists(base::FilePath(alternative_filepath))) { |
| 631 alternative_filepath = base::FilePath( | 631 alternative_filepath = base::FilePath( |
| 632 filepath.value() + "_" + base::IntToString(i) + ".desktop"); | 632 filepath.value() + "_" + base::IntToString(i) + ".desktop"); |
| 633 } else { | 633 } else { |
| 634 return base::FilePath(alternative_filepath).BaseName(); | 634 return base::FilePath(alternative_filepath).BaseName(); |
| 635 } | 635 } |
| 636 } | 636 } |
| 637 | 637 |
| 638 return base::FilePath(); | 638 return base::FilePath(); |
| 639 } | 639 } |
| 640 | 640 |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 // Delete shortcuts from |kDirectoryFilename|. | 868 // Delete shortcuts from |kDirectoryFilename|. |
| 869 // Note that it is possible that shortcuts were not created in the Chrome Apps | 869 // Note that it is possible that shortcuts were not created in the Chrome Apps |
| 870 // directory (depending on the value of |applications_menu_subdir| when they | 870 // directory (depending on the value of |applications_menu_subdir| when they |
| 871 // were created). It doesn't matter: this will still delete the shortcut even | 871 // were created). It doesn't matter: this will still delete the shortcut even |
| 872 // if it isn't in the directory. | 872 // if it isn't in the directory. |
| 873 DeleteShortcutInApplicationsMenu(shortcut_filename, | 873 DeleteShortcutInApplicationsMenu(shortcut_filename, |
| 874 base::FilePath(kDirectoryFilename)); | 874 base::FilePath(kDirectoryFilename)); |
| 875 } | 875 } |
| 876 | 876 |
| 877 } // namespace ShellIntegrationLinux | 877 } // namespace ShellIntegrationLinux |
| OLD | NEW |