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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 for (gfx::ImageFamily::const_iterator it = icon_images.begin(); | 96 for (gfx::ImageFamily::const_iterator it = icon_images.begin(); |
97 it != icon_images.end(); ++it) { | 97 it != icon_images.end(); ++it) { |
98 int width = it->Width(); | 98 int width = it->Width(); |
99 scoped_refptr<base::RefCountedMemory> png_data = it->As1xPNGBytes(); | 99 scoped_refptr<base::RefCountedMemory> png_data = it->As1xPNGBytes(); |
100 if (png_data->size() == 0) { | 100 if (png_data->size() == 0) { |
101 // If the bitmap could not be encoded to PNG format, skip it. | 101 // If the bitmap could not be encoded to PNG format, skip it. |
102 LOG(WARNING) << "Could not encode icon " << icon_name << ".png at size " | 102 LOG(WARNING) << "Could not encode icon " << icon_name << ".png at size " |
103 << width << "."; | 103 << width << "."; |
104 continue; | 104 continue; |
105 } | 105 } |
106 int bytes_written = file_util::WriteFile(temp_file_path, | 106 int bytes_written = base::WriteFile(temp_file_path, |
107 png_data->front_as<char>(), | 107 png_data->front_as<char>(), |
108 png_data->size()); | 108 png_data->size()); |
109 | 109 |
110 if (bytes_written != static_cast<int>(png_data->size())) | 110 if (bytes_written != static_cast<int>(png_data->size())) |
111 return std::string(); | 111 return std::string(); |
112 | 112 |
113 std::vector<std::string> argv; | 113 std::vector<std::string> argv; |
114 argv.push_back("xdg-icon-resource"); | 114 argv.push_back("xdg-icon-resource"); |
115 argv.push_back("install"); | 115 argv.push_back("install"); |
116 | 116 |
117 // Always install in user mode, even if someone runs the browser as root | 117 // Always install in user mode, even if someone runs the browser as root |
118 // (people do that). | 118 // (people do that). |
(...skipping 29 matching lines...) Expand all Loading... |
148 | 148 |
149 int fd = openat(desktop_fd, shortcut_filename.value().c_str(), | 149 int fd = openat(desktop_fd, shortcut_filename.value().c_str(), |
150 O_CREAT | O_EXCL | O_WRONLY, | 150 O_CREAT | O_EXCL | O_WRONLY, |
151 S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); | 151 S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); |
152 if (fd < 0) { | 152 if (fd < 0) { |
153 if (IGNORE_EINTR(close(desktop_fd)) < 0) | 153 if (IGNORE_EINTR(close(desktop_fd)) < 0) |
154 PLOG(ERROR) << "close"; | 154 PLOG(ERROR) << "close"; |
155 return false; | 155 return false; |
156 } | 156 } |
157 | 157 |
158 ssize_t bytes_written = file_util::WriteFileDescriptor(fd, contents.data(), | 158 ssize_t bytes_written = base::WriteFileDescriptor(fd, contents.data(), |
159 contents.length()); | 159 contents.length()); |
160 if (IGNORE_EINTR(close(fd)) < 0) | 160 if (IGNORE_EINTR(close(fd)) < 0) |
161 PLOG(ERROR) << "close"; | 161 PLOG(ERROR) << "close"; |
162 | 162 |
163 if (bytes_written != static_cast<ssize_t>(contents.length())) { | 163 if (bytes_written != static_cast<ssize_t>(contents.length())) { |
164 // Delete the file. No shortuct is better than corrupted one. Use unlinkat | 164 // Delete the file. No shortuct is better than corrupted one. Use unlinkat |
165 // to make sure we're deleting the file in the directory we think we are. | 165 // to make sure we're deleting the file in the directory we think we are. |
166 // Even if an attacker manager to put something other at | 166 // Even if an attacker manager to put something other at |
167 // |shortcut_filename| we'll just undo his action. | 167 // |shortcut_filename| we'll just undo his action. |
168 unlinkat(desktop_fd, shortcut_filename.value().c_str(), 0); | 168 unlinkat(desktop_fd, shortcut_filename.value().c_str(), 0); |
169 } | 169 } |
(...skipping 19 matching lines...) Expand all Loading... |
189 const base::FilePath& directory_filename, | 189 const base::FilePath& directory_filename, |
190 const std::string& directory_contents) { | 190 const std::string& directory_contents) { |
191 base::ScopedTempDir temp_dir; | 191 base::ScopedTempDir temp_dir; |
192 if (!temp_dir.CreateUniqueTempDir()) | 192 if (!temp_dir.CreateUniqueTempDir()) |
193 return false; | 193 return false; |
194 | 194 |
195 base::FilePath temp_directory_path; | 195 base::FilePath temp_directory_path; |
196 if (!directory_filename.empty()) { | 196 if (!directory_filename.empty()) { |
197 temp_directory_path = temp_dir.path().Append(directory_filename); | 197 temp_directory_path = temp_dir.path().Append(directory_filename); |
198 | 198 |
199 int bytes_written = file_util::WriteFile(temp_directory_path, | 199 int bytes_written = base::WriteFile(temp_directory_path, |
200 directory_contents.data(), | 200 directory_contents.data(), |
201 directory_contents.length()); | 201 directory_contents.length()); |
202 | 202 |
203 if (bytes_written != static_cast<int>(directory_contents.length())) | 203 if (bytes_written != static_cast<int>(directory_contents.length())) |
204 return false; | 204 return false; |
205 } | 205 } |
206 | 206 |
207 base::FilePath temp_file_path = temp_dir.path().Append(shortcut_filename); | 207 base::FilePath temp_file_path = temp_dir.path().Append(shortcut_filename); |
208 | 208 |
209 int bytes_written = file_util::WriteFile(temp_file_path, contents.data(), | 209 int bytes_written = base::WriteFile(temp_file_path, contents.data(), |
210 contents.length()); | 210 contents.length()); |
211 | 211 |
212 if (bytes_written != static_cast<int>(contents.length())) | 212 if (bytes_written != static_cast<int>(contents.length())) |
213 return false; | 213 return false; |
214 | 214 |
215 std::vector<std::string> argv; | 215 std::vector<std::string> argv; |
216 argv.push_back("xdg-desktop-menu"); | 216 argv.push_back("xdg-desktop-menu"); |
217 argv.push_back("install"); | 217 argv.push_back("install"); |
218 | 218 |
219 // Always install in user mode, even if someone runs the browser as root | 219 // Always install in user mode, even if someone runs the browser as root |
220 // (people do that). | 220 // (people do that). |
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 for (std::vector<base::FilePath>::const_iterator it = | 1028 for (std::vector<base::FilePath>::const_iterator it = |
1029 shortcut_filenames_app_menu.begin(); | 1029 shortcut_filenames_app_menu.begin(); |
1030 it != shortcut_filenames_app_menu.end(); ++it) { | 1030 it != shortcut_filenames_app_menu.end(); ++it) { |
1031 DeleteShortcutInApplicationsMenu(*it, | 1031 DeleteShortcutInApplicationsMenu(*it, |
1032 base::FilePath(kDirectoryFilename)); | 1032 base::FilePath(kDirectoryFilename)); |
1033 } | 1033 } |
1034 } | 1034 } |
1035 } | 1035 } |
1036 | 1036 |
1037 } // namespace ShellIntegrationLinux | 1037 } // namespace ShellIntegrationLinux |
OLD | NEW |