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

Side by Side Diff: chrome/browser/jumplist.cc

Issue 348035: Use FilePath in JumpList. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/jumplist.h ('k') | no next file » | 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) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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/jumplist.h" 5 #include "chrome/browser/jumplist.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <shobjidl.h> 8 #include <shobjidl.h>
9 #include <propkey.h> 9 #include <propkey.h>
10 #include <propvarutil.h> 10 #include <propvarutil.h>
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 result = property_store->Commit(); 232 result = property_store->Commit();
233 if (FAILED(result)) 233 if (FAILED(result))
234 return result; 234 return result;
235 235
236 // Add this IShellLink object to the given collection. 236 // Add this IShellLink object to the given collection.
237 return collection->AddObject(link); 237 return collection->AddObject(link);
238 } 238 }
239 239
240 // Creates a temporary icon file to be shown in JumpList. 240 // Creates a temporary icon file to be shown in JumpList.
241 bool CreateIconFile(const SkBitmap& bitmap, 241 bool CreateIconFile(const SkBitmap& bitmap,
242 const std::wstring& icon_dir, 242 const FilePath& icon_dir,
243 std::wstring* icon_path) { 243 FilePath* icon_path) {
244 // Retrieve the path to a temporary file. 244 // Retrieve the path to a temporary file.
245 // We don't have to care about the extension of this temporary file because 245 // We don't have to care about the extension of this temporary file because
246 // JumpList does not care about it. 246 // JumpList does not care about it.
247 FilePath path; 247 FilePath path;
248 if (!file_util::CreateTemporaryFileInDir(FilePath(icon_dir), &path)) 248 if (!file_util::CreateTemporaryFileInDir(icon_dir, &path))
249 return false; 249 return false;
250 250
251 // Create an icon file from the favicon attached to the given |page|, and 251 // Create an icon file from the favicon attached to the given |page|, and
252 // save it as the temporary file. 252 // save it as the temporary file.
253 if (!IconUtil::CreateIconFileFromSkBitmap(bitmap, path.value())) 253 if (!IconUtil::CreateIconFileFromSkBitmap(bitmap, path.value()))
254 return false; 254 return false;
255 255
256 // Add this icon file to the list and return its absolute path. 256 // Add this icon file to the list and return its absolute path.
257 // The IShellLink::SetIcon() function needs the absolute path to an icon. 257 // The IShellLink::SetIcon() function needs the absolute path to an icon.
258 icon_path->assign(path.value()); 258 *icon_path = path;
259 return true; 259 return true;
260 } 260 }
261 261
262 // Updates a specified category of an application JumpList. 262 // Updates a specified category of an application JumpList.
263 // This function cannot update registered categories (such as "Tasks") because 263 // This function cannot update registered categories (such as "Tasks") because
264 // special steps are required for updating them. 264 // special steps are required for updating them.
265 // So, this function can be used only for adding an unregistered category. 265 // So, this function can be used only for adding an unregistered category.
266 // Parameters: 266 // Parameters:
267 // * category_id (int) 267 // * category_id (int)
268 // A string ID which contains the category name. 268 // A string ID which contains the category name.
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 // 1. Prepare objects required by this task: 451 // 1. Prepare objects required by this task:
452 // * a std::wstring that contains a temporary icons; 452 // * a std::wstring that contains a temporary icons;
453 // * a ShellLinkItemList that contains the items of the "Most Visited" 453 // * a ShellLinkItemList that contains the items of the "Most Visited"
454 // category, and; 454 // category, and;
455 // * a ShellLinkItemList that contains the items of the "Recently Closed" 455 // * a ShellLinkItemList that contains the items of the "Recently Closed"
456 // category. 456 // category.
457 // 2. Create a JumpListUpdateTask instance, and; 457 // 2. Create a JumpListUpdateTask instance, and;
458 // 3. Post this task to the file thread. 458 // 3. Post this task to the file thread.
459 class JumpListUpdateTask : public Task { 459 class JumpListUpdateTask : public Task {
460 public: 460 public:
461 JumpListUpdateTask(const std::wstring& icon_dir, 461 JumpListUpdateTask(const FilePath& icon_dir,
462 const ShellLinkItemList& most_visited_pages, 462 const ShellLinkItemList& most_visited_pages,
463 const ShellLinkItemList& recently_closed_pages) 463 const ShellLinkItemList& recently_closed_pages)
464 : icon_dir_(icon_dir), 464 : icon_dir_(icon_dir),
465 most_visited_pages_(most_visited_pages), 465 most_visited_pages_(most_visited_pages),
466 recently_closed_pages_(recently_closed_pages) { 466 recently_closed_pages_(recently_closed_pages) {
467 } 467 }
468 468
469 private: 469 private:
470 // Represents an entry point of this task. 470 // Represents an entry point of this task.
471 // When we post this task to a file thread, the thread calls this function. 471 // When we post this task to a file thread, the thread calls this function.
472 void Run(); 472 void Run();
473 473
474 // The directory which contains JumpList icons. 474 // The directory which contains JumpList icons.
475 std::wstring icon_dir_; 475 FilePath icon_dir_;
476 476
477 // Items in the "Most Visited" category of the application JumpList. 477 // Items in the "Most Visited" category of the application JumpList.
478 ShellLinkItemList most_visited_pages_; 478 ShellLinkItemList most_visited_pages_;
479 479
480 // Items in the "Recently Closed" category of the application JumpList. 480 // Items in the "Recently Closed" category of the application JumpList.
481 ShellLinkItemList recently_closed_pages_; 481 ShellLinkItemList recently_closed_pages_;
482 }; 482 };
483 483
484 void JumpListUpdateTask::Run() { 484 void JumpListUpdateTask::Run() {
485 // Delete the directory which contains old icon files, rename the current 485 // Delete the directory which contains old icon files, rename the current
486 // icon directory, and create a new directory which contains new JumpList 486 // icon directory, and create a new directory which contains new JumpList
487 // icon files. 487 // icon files.
488 std::wstring icon_dir_old(icon_dir_ + L"Old"); 488 FilePath icon_dir_old(icon_dir_.value() + L"Old");
489 if (file_util::PathExists(FilePath::FromWStringHack(icon_dir_old))) 489 if (file_util::PathExists(icon_dir_old))
490 file_util::Delete(icon_dir_old, true); 490 file_util::Delete(icon_dir_old, true);
491 file_util::Move(FilePath::FromWStringHack(icon_dir_), 491 file_util::Move(icon_dir_, icon_dir_old);
492 FilePath::FromWStringHack(icon_dir_old));
493 file_util::CreateDirectory(icon_dir_); 492 file_util::CreateDirectory(icon_dir_);
494 493
495 // Create temporary icon files for shortcuts in the "Most Visited" category. 494 // Create temporary icon files for shortcuts in the "Most Visited" category.
496 for (ShellLinkItemList::const_iterator item = most_visited_pages_.begin(); 495 for (ShellLinkItemList::const_iterator item = most_visited_pages_.begin();
497 item != most_visited_pages_.end(); ++item) { 496 item != most_visited_pages_.end(); ++item) {
498 SkBitmap icon_bitmap; 497 SkBitmap icon_bitmap;
499 if ((*item)->data().get() && 498 if ((*item)->data().get() &&
500 gfx::PNGCodec::Decode((*item)->data()->front(), 499 gfx::PNGCodec::Decode((*item)->data()->front(),
501 (*item)->data()->size(), 500 (*item)->data()->size(),
502 &icon_bitmap)) { 501 &icon_bitmap)) {
503 std::wstring icon_path; 502 FilePath icon_path;
504 if (CreateIconFile(icon_bitmap, icon_dir_, &icon_path)) 503 if (CreateIconFile(icon_bitmap, icon_dir_, &icon_path))
505 (*item)->SetIcon(icon_path, 0, true); 504 (*item)->SetIcon(icon_path.value(), 0, true);
506 } 505 }
507 } 506 }
508 507
509 // Create temporary icon files for shortcuts in the "Recently Closed" 508 // Create temporary icon files for shortcuts in the "Recently Closed"
510 // category. 509 // category.
511 for (ShellLinkItemList::const_iterator item = recently_closed_pages_.begin(); 510 for (ShellLinkItemList::const_iterator item = recently_closed_pages_.begin();
512 item != recently_closed_pages_.end(); ++item) { 511 item != recently_closed_pages_.end(); ++item) {
513 SkBitmap icon_bitmap; 512 SkBitmap icon_bitmap;
514 if ((*item)->data().get() && 513 if ((*item)->data().get() &&
515 gfx::PNGCodec::Decode((*item)->data()->front(), 514 gfx::PNGCodec::Decode((*item)->data()->front(),
516 (*item)->data()->size(), 515 (*item)->data()->size(),
517 &icon_bitmap)) { 516 &icon_bitmap)) {
518 std::wstring icon_path; 517 FilePath icon_path;
519 if (CreateIconFile(icon_bitmap, icon_dir_, &icon_path)) 518 if (CreateIconFile(icon_bitmap, icon_dir_, &icon_path))
520 (*item)->SetIcon(icon_path, 0, true); 519 (*item)->SetIcon(icon_path.value(), 0, true);
521 } 520 }
522 } 521 }
523 522
524 // We finished collecting all resources needed for updating an appliation 523 // We finished collecting all resources needed for updating an appliation
525 // JumpList. So, create a new JumpList and replace the current JumpList 524 // JumpList. So, create a new JumpList and replace the current JumpList
526 // with it. 525 // with it.
527 UpdateJumpList(most_visited_pages_, recently_closed_pages_); 526 UpdateJumpList(most_visited_pages_, recently_closed_pages_);
528 527
529 // Delete all items in these lists now since we don't need the ShellLinkItem 528 // Delete all items in these lists now since we don't need the ShellLinkItem
530 // objects in these lists. 529 // objects in these lists.
(...skipping 23 matching lines...) Expand all
554 // When we add this object to the observer list, we save the pointer to this 553 // When we add this object to the observer list, we save the pointer to this
555 // TabRestoreService object. This pointer is used when we remove this object 554 // TabRestoreService object. This pointer is used when we remove this object
556 // from the observer list. 555 // from the observer list.
557 if (win_util::GetWinVersion() < win_util::WINVERSION_WIN7 || !profile) 556 if (win_util::GetWinVersion() < win_util::WINVERSION_WIN7 || !profile)
558 return false; 557 return false;
559 558
560 TabRestoreService* tab_restore_service = profile->GetTabRestoreService(); 559 TabRestoreService* tab_restore_service = profile->GetTabRestoreService();
561 if (!tab_restore_service) 560 if (!tab_restore_service)
562 return false; 561 return false;
563 562
564 icon_dir_ = profile->GetPath().Append(chrome::kJumpListIconDirname).value(); 563 icon_dir_ = profile->GetPath().Append(chrome::kJumpListIconDirname);
565 profile_ = profile; 564 profile_ = profile;
566 tab_restore_service->AddObserver(this); 565 tab_restore_service->AddObserver(this);
567 return true; 566 return true;
568 } 567 }
569 568
570 void JumpList::RemoveObserver() { 569 void JumpList::RemoveObserver() {
571 if (profile_ && profile_->GetTabRestoreService()) 570 if (profile_ && profile_->GetTabRestoreService())
572 profile_->GetTabRestoreService()->RemoveObserver(this); 571 profile_->GetTabRestoreService()->RemoveObserver(this);
573 profile_ = NULL; 572 profile_ = NULL;
574 } 573 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 most_visited_pages_, 735 most_visited_pages_,
737 recently_closed_pages_); 736 recently_closed_pages_);
738 MessageLoop* file_loop = g_browser_process->file_thread()->message_loop(); 737 MessageLoop* file_loop = g_browser_process->file_thread()->message_loop();
739 if (file_loop) 738 if (file_loop)
740 file_loop->PostTask(FROM_HERE, icon_task); 739 file_loop->PostTask(FROM_HERE, icon_task);
741 740
742 // Delete all items in these lists since we don't need these lists any longer. 741 // Delete all items in these lists since we don't need these lists any longer.
743 most_visited_pages_.clear(); 742 most_visited_pages_.clear();
744 recently_closed_pages_.clear(); 743 recently_closed_pages_.clear();
745 } 744 }
OLDNEW
« no previous file with comments | « chrome/browser/jumplist.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698