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

Side by Side Diff: chrome/browser/win/jumplist_updater.cc

Issue 2894483002: Migrate from ScopedComPtr::CreateInstance() to CoCreateInstance in chrome/... (Closed)
Patch Set: Fix Header Include Location Created 3 years, 7 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/win/jumplist_updater.h" 5 #include "chrome/browser/win/jumplist_updater.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <objbase.h> 8 #include <objbase.h>
9 #include <propkey.h> 9 #include <propkey.h>
10 #include <shobjidl.h> 10 #include <shobjidl.h>
(...skipping 10 matching lines...) Expand all
21 21
22 // Creates an IShellLink object. 22 // Creates an IShellLink object.
23 // An IShellLink object is almost the same as an application shortcut, and it 23 // An IShellLink object is almost the same as an application shortcut, and it
24 // requires three items: the absolute path to an application, an argument 24 // requires three items: the absolute path to an application, an argument
25 // string, and a title string. 25 // string, and a title string.
26 bool AddShellLink(base::win::ScopedComPtr<IObjectCollection> collection, 26 bool AddShellLink(base::win::ScopedComPtr<IObjectCollection> collection,
27 const base::string16& application_path, 27 const base::string16& application_path,
28 scoped_refptr<ShellLinkItem> item) { 28 scoped_refptr<ShellLinkItem> item) {
29 // Create an IShellLink object. 29 // Create an IShellLink object.
30 base::win::ScopedComPtr<IShellLink> link; 30 base::win::ScopedComPtr<IShellLink> link;
31 HRESULT result = link.CreateInstance(CLSID_ShellLink, NULL, 31 HRESULT result = ::CoCreateInstance(
32 CLSCTX_INPROC_SERVER); 32 CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&link));
33 if (FAILED(result)) 33 if (FAILED(result))
34 return false; 34 return false;
35 35
36 // Set the application path. 36 // Set the application path.
37 // We should exit this function when this call fails because it doesn't make 37 // We should exit this function when this call fails because it doesn't make
38 // any sense to add a shortcut that we cannot execute. 38 // any sense to add a shortcut that we cannot execute.
39 result = link->SetPath(application_path.c_str()); 39 result = link->SetPath(application_path.c_str());
40 if (FAILED(result)) 40 if (FAILED(result))
41 return false; 41 return false;
42 42
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 SCOPED_UMA_HISTOGRAM_TIMER("WinJumplistUpdater.BeginUpdateDuration"); 118 SCOPED_UMA_HISTOGRAM_TIMER("WinJumplistUpdater.BeginUpdateDuration");
119 119
120 // This instance is expected to be one-time-use only. 120 // This instance is expected to be one-time-use only.
121 DCHECK(!destination_list_.Get()); 121 DCHECK(!destination_list_.Get());
122 122
123 // Check preconditions. 123 // Check preconditions.
124 if (!JumpListUpdater::IsEnabled() || app_user_model_id_.empty()) 124 if (!JumpListUpdater::IsEnabled() || app_user_model_id_.empty())
125 return false; 125 return false;
126 126
127 // Create an ICustomDestinationList object and attach it to our application. 127 // Create an ICustomDestinationList object and attach it to our application.
128 HRESULT result = destination_list_.CreateInstance(CLSID_DestinationList, NULL, 128 HRESULT result =
129 CLSCTX_INPROC_SERVER); 129 ::CoCreateInstance(CLSID_DestinationList, NULL, CLSCTX_INPROC_SERVER,
130 IID_PPV_ARGS(&destination_list_));
130 if (FAILED(result)) 131 if (FAILED(result))
131 return false; 132 return false;
132 133
133 // Set the App ID for this JumpList. 134 // Set the App ID for this JumpList.
134 result = destination_list_->SetAppID(app_user_model_id_.c_str()); 135 result = destination_list_->SetAppID(app_user_model_id_.c_str());
135 if (FAILED(result)) 136 if (FAILED(result))
136 return false; 137 return false;
137 138
138 // Start a transaction that updates the JumpList of this application. 139 // Start a transaction that updates the JumpList of this application.
139 // This implementation just replaces the all items in this JumpList, so 140 // This implementation just replaces the all items in this JumpList, so
(...skipping 30 matching lines...) Expand all
170 return false; 171 return false;
171 172
172 // Retrieve the absolute path to "chrome.exe". 173 // Retrieve the absolute path to "chrome.exe".
173 base::FilePath application_path; 174 base::FilePath application_path;
174 if (!PathService::Get(base::FILE_EXE, &application_path)) 175 if (!PathService::Get(base::FILE_EXE, &application_path))
175 return false; 176 return false;
176 177
177 // Create an EnumerableObjectCollection object to be added items of the 178 // Create an EnumerableObjectCollection object to be added items of the
178 // "Task" category. 179 // "Task" category.
179 base::win::ScopedComPtr<IObjectCollection> collection; 180 base::win::ScopedComPtr<IObjectCollection> collection;
180 HRESULT result = collection.CreateInstance(CLSID_EnumerableObjectCollection, 181 HRESULT result =
181 NULL, CLSCTX_INPROC_SERVER); 182 ::CoCreateInstance(CLSID_EnumerableObjectCollection, NULL,
183 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&collection));
182 if (FAILED(result)) 184 if (FAILED(result))
183 return false; 185 return false;
184 186
185 // Add items to the "Task" category. 187 // Add items to the "Task" category.
186 for (ShellLinkItemList::const_iterator it = link_items.begin(); 188 for (ShellLinkItemList::const_iterator it = link_items.begin();
187 it != link_items.end(); ++it) { 189 it != link_items.end(); ++it) {
188 if (!AddShellLink(collection, application_path.value(), *it)) 190 if (!AddShellLink(collection, application_path.value(), *it))
189 return false; 191 return false;
190 } 192 }
191 193
(...skipping 26 matching lines...) Expand all
218 // Exit this function when the given vector does not contain any items 220 // Exit this function when the given vector does not contain any items
219 // because an ICustomDestinationList::AppendCategory() call fails in this 221 // because an ICustomDestinationList::AppendCategory() call fails in this
220 // case. 222 // case.
221 if (link_items.empty() || !max_items) 223 if (link_items.empty() || !max_items)
222 return true; 224 return true;
223 225
224 // Create an EnumerableObjectCollection object. 226 // Create an EnumerableObjectCollection object.
225 // We once add the given items to this collection object and add this 227 // We once add the given items to this collection object and add this
226 // collection to the JumpList. 228 // collection to the JumpList.
227 base::win::ScopedComPtr<IObjectCollection> collection; 229 base::win::ScopedComPtr<IObjectCollection> collection;
228 HRESULT result = collection.CreateInstance(CLSID_EnumerableObjectCollection, 230 HRESULT result =
229 NULL, CLSCTX_INPROC_SERVER); 231 ::CoCreateInstance(CLSID_EnumerableObjectCollection, NULL,
232 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&collection));
230 if (FAILED(result)) 233 if (FAILED(result))
231 return false; 234 return false;
232 235
233 for (ShellLinkItemList::const_iterator item = link_items.begin(); 236 for (ShellLinkItemList::const_iterator item = link_items.begin();
234 item != link_items.end() && max_items > 0; ++item, --max_items) { 237 item != link_items.end() && max_items > 0; ++item, --max_items) {
235 if (!AddShellLink(collection, application_path.value(), *item)) 238 if (!AddShellLink(collection, application_path.value(), *item))
236 return false; 239 return false;
237 } 240 }
238 241
239 // We can now add the new list to the JumpList. 242 // We can now add the new list to the JumpList.
240 // The ICustomDestinationList::AppendCategory() function needs the 243 // The ICustomDestinationList::AppendCategory() function needs the
241 // IObjectArray interface to retrieve each item in the list. So, we retrive 244 // IObjectArray interface to retrieve each item in the list. So, we retrive
242 // the IObjectArray interface from the IEnumerableObjectCollection object 245 // the IObjectArray interface from the IEnumerableObjectCollection object
243 // and use it. 246 // and use it.
244 // It seems the ICustomDestinationList::AppendCategory() function just 247 // It seems the ICustomDestinationList::AppendCategory() function just
245 // replaces all items in the given category with the ones in the new list. 248 // replaces all items in the given category with the ones in the new list.
246 base::win::ScopedComPtr<IObjectArray> object_array; 249 base::win::ScopedComPtr<IObjectArray> object_array;
247 result = collection.CopyTo(object_array.GetAddressOf()); 250 result = collection.CopyTo(object_array.GetAddressOf());
248 if (FAILED(result)) 251 if (FAILED(result))
249 return false; 252 return false;
250 253
251 return SUCCEEDED(destination_list_->AppendCategory(category_name.c_str(), 254 return SUCCEEDED(destination_list_->AppendCategory(category_name.c_str(),
252 object_array.Get())); 255 object_array.Get()));
253 } 256 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/tabs/window_finder_win.cc ('k') | chrome/browser/win/settings_app_monitor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698