Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: base/win/shortcut.cc

Issue 2909943003: Removing useless Win7 checks + standardize its use (Closed)
Patch Set: Various nits Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/win/shortcut.h ('k') | base/win/shortcut_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/win/shortcut.h" 5 #include "base/win/shortcut.h"
6 6
7 #include <objbase.h> 7 #include <objbase.h>
8 #include <shellapi.h> 8 #include <shellapi.h>
9 #include <shlobj.h> 9 #include <shlobj.h>
10 #include <propkey.h> 10 #include <propkey.h>
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 if ((properties.options & ShortcutProperties::PROPERTIES_ICON) && 130 if ((properties.options & ShortcutProperties::PROPERTIES_ICON) &&
131 FAILED(i_shell_link->SetIconLocation(properties.icon.value().c_str(), 131 FAILED(i_shell_link->SetIconLocation(properties.icon.value().c_str(),
132 properties.icon_index))) { 132 properties.icon_index))) {
133 return false; 133 return false;
134 } 134 }
135 135
136 bool has_app_id = 136 bool has_app_id =
137 (properties.options & ShortcutProperties::PROPERTIES_APP_ID) != 0; 137 (properties.options & ShortcutProperties::PROPERTIES_APP_ID) != 0;
138 bool has_dual_mode = 138 bool has_dual_mode =
139 (properties.options & ShortcutProperties::PROPERTIES_DUAL_MODE) != 0; 139 (properties.options & ShortcutProperties::PROPERTIES_DUAL_MODE) != 0;
140 if ((has_app_id || has_dual_mode) && 140 if (has_app_id || has_dual_mode) {
141 GetVersion() >= VERSION_WIN7) {
142 ScopedComPtr<IPropertyStore> property_store; 141 ScopedComPtr<IPropertyStore> property_store;
143 if (FAILED(i_shell_link.CopyTo(property_store.GetAddressOf())) || 142 if (FAILED(i_shell_link.CopyTo(property_store.GetAddressOf())) ||
144 !property_store.Get()) 143 !property_store.Get())
145 return false; 144 return false;
146 145
147 if (has_app_id && 146 if (has_app_id &&
148 !SetAppIdForPropertyStore(property_store.Get(), 147 !SetAppIdForPropertyStore(property_store.Get(),
149 properties.app_id.c_str())) { 148 properties.app_id.c_str())) {
150 return false; 149 return false;
151 } 150 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 properties->set_description(temp); 240 properties->set_description(temp);
242 } 241 }
243 242
244 if (options & ShortcutProperties::PROPERTIES_ICON) { 243 if (options & ShortcutProperties::PROPERTIES_ICON) {
245 int temp_index; 244 int temp_index;
246 if (FAILED(i_shell_link->GetIconLocation(temp, MAX_PATH, &temp_index))) 245 if (FAILED(i_shell_link->GetIconLocation(temp, MAX_PATH, &temp_index)))
247 return false; 246 return false;
248 properties->set_icon(FilePath(temp), temp_index); 247 properties->set_icon(FilePath(temp), temp_index);
249 } 248 }
250 249
251 // Windows 7+ options, avoiding unnecessary work. 250 if (options & ShortcutProperties::PROPERTIES_WIN7) {
252 if ((options & ShortcutProperties::PROPERTIES_WIN7) &&
253 GetVersion() >= VERSION_WIN7) {
254 ScopedComPtr<IPropertyStore> property_store; 251 ScopedComPtr<IPropertyStore> property_store;
255 if (FAILED(i_shell_link.CopyTo(property_store.GetAddressOf()))) 252 if (FAILED(i_shell_link.CopyTo(property_store.GetAddressOf())))
256 return false; 253 return false;
257 254
258 if (options & ShortcutProperties::PROPERTIES_APP_ID) { 255 if (options & ShortcutProperties::PROPERTIES_APP_ID) {
259 ScopedPropVariant pv_app_id; 256 ScopedPropVariant pv_app_id;
260 if (property_store->GetValue(PKEY_AppUserModel_ID, 257 if (property_store->GetValue(PKEY_AppUserModel_ID,
261 pv_app_id.Receive()) != S_OK) { 258 pv_app_id.Receive()) != S_OK) {
262 return false; 259 return false;
263 } 260 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 return false; 309 return false;
313 310
314 if (target_path) 311 if (target_path)
315 *target_path = properties.target; 312 *target_path = properties.target;
316 if (args) 313 if (args)
317 *args = properties.arguments; 314 *args = properties.arguments;
318 return true; 315 return true;
319 } 316 }
320 317
321 bool CanPinShortcutToTaskbar() { 318 bool CanPinShortcutToTaskbar() {
322 // "Pin to taskbar" appeared in Windows 7 and stopped being supported in 319 // "Pin to taskbar" stopped being supported in Windows 10.
323 // Windows 10. 320 return GetVersion() < VERSION_WIN10;
324 return GetVersion() >= VERSION_WIN7 && GetVersion() < VERSION_WIN10;
325 } 321 }
326 322
327 bool PinShortcutToTaskbar(const FilePath& shortcut) { 323 bool PinShortcutToTaskbar(const FilePath& shortcut) {
328 base::ThreadRestrictions::AssertIOAllowed(); 324 base::ThreadRestrictions::AssertIOAllowed();
329 DCHECK(CanPinShortcutToTaskbar()); 325 DCHECK(CanPinShortcutToTaskbar());
330 326
331 intptr_t result = reinterpret_cast<intptr_t>(ShellExecute( 327 intptr_t result = reinterpret_cast<intptr_t>(ShellExecute(
332 NULL, L"taskbarpin", shortcut.value().c_str(), NULL, NULL, 0)); 328 NULL, L"taskbarpin", shortcut.value().c_str(), NULL, NULL, 0));
333 return result > 32; 329 return result > 32;
334 } 330 }
335 331
336 bool UnpinShortcutFromTaskbar(const FilePath& shortcut) { 332 bool UnpinShortcutFromTaskbar(const FilePath& shortcut) {
337 base::ThreadRestrictions::AssertIOAllowed(); 333 base::ThreadRestrictions::AssertIOAllowed();
338 334
339 // "Unpin from taskbar" is only supported after Win7. It is possible to remove
340 // a shortcut pinned by a user on Windows 10+.
341 if (GetVersion() < VERSION_WIN7)
342 return false;
343
344 intptr_t result = reinterpret_cast<intptr_t>(ShellExecute( 335 intptr_t result = reinterpret_cast<intptr_t>(ShellExecute(
345 NULL, L"taskbarunpin", shortcut.value().c_str(), NULL, NULL, 0)); 336 NULL, L"taskbarunpin", shortcut.value().c_str(), NULL, NULL, 0));
346 return result > 32; 337 return result > 32;
347 } 338 }
348 339
349 } // namespace win 340 } // namespace win
350 } // namespace base 341 } // namespace base
OLDNEW
« no previous file with comments | « base/win/shortcut.h ('k') | base/win/shortcut_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698