OLD | NEW |
---|---|
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 "components/bookmarks/browser/bookmark_model.h" | 5 #include "components/bookmarks/browser/bookmark_model.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
439 DCHECK(client_->CanSyncNode(node)); | 439 DCHECK(client_->CanSyncNode(node)); |
440 | 440 |
441 if (sync_transaction_version == node->sync_transaction_version()) | 441 if (sync_transaction_version == node->sync_transaction_version()) |
442 return; | 442 return; |
443 | 443 |
444 AsMutable(node)->set_sync_transaction_version(sync_transaction_version); | 444 AsMutable(node)->set_sync_transaction_version(sync_transaction_version); |
445 if (store_.get()) | 445 if (store_.get()) |
446 store_->ScheduleSave(); | 446 store_->ScheduleSave(); |
447 } | 447 } |
448 | 448 |
449 void BookmarkModel::OnFaviconChanged(const std::set<GURL>& urls) { | 449 void BookmarkModel::OnFaviconsChanged(const std::vector<GURL>& page_urls, |
450 const std::vector<GURL>& icon_urls) { | |
450 // Ignore events if |Load| has not been called yet. | 451 // Ignore events if |Load| has not been called yet. |
451 if (!store_) | 452 if (!store_) |
452 return; | 453 return; |
453 | 454 |
454 // Prevent the observers from getting confused for multiple favicon loads. | 455 std::set<const BookmarkNode*> to_update; |
455 for (std::set<GURL>::const_iterator i = urls.begin(); i != urls.end(); ++i) { | 456 for (const GURL& page_url : page_urls) { |
456 std::vector<const BookmarkNode*> nodes; | 457 std::vector<const BookmarkNode*> nodes; |
457 GetNodesByURL(*i, &nodes); | 458 GetNodesByURL(page_url, &nodes); |
458 for (size_t i = 0; i < nodes.size(); ++i) { | 459 for (const BookmarkNode* node : nodes) |
459 // Got an updated favicon, for a URL, do a new request. | 460 to_update.insert(node); |
460 BookmarkNode* node = AsMutable(nodes[i]); | 461 } |
461 node->InvalidateFavicon(); | 462 |
462 CancelPendingFaviconLoadRequests(node); | 463 for (const GURL& icon_url : icon_urls) { |
463 FOR_EACH_OBSERVER(BookmarkModelObserver, | 464 std::vector<const BookmarkNode*> nodes; |
464 observers_, | 465 GetNodesByIconURL(icon_url, &nodes); |
465 BookmarkNodeFaviconChanged(this, node)); | 466 for (const BookmarkNode* node : nodes) |
466 } | 467 to_update.insert(node); |
468 } | |
469 | |
470 for (const BookmarkNode* node : to_update) { | |
471 // Rerequest the favicon. | |
472 BookmarkNode* mutable_node = AsMutable(node); | |
473 mutable_node->InvalidateFavicon(); | |
474 CancelPendingFaviconLoadRequests(mutable_node); | |
475 FOR_EACH_OBSERVER(BookmarkModelObserver, | |
476 observers_, | |
477 BookmarkNodeFaviconChanged(this, mutable_node)); | |
467 } | 478 } |
468 } | 479 } |
469 | 480 |
470 void BookmarkModel::SetDateAdded(const BookmarkNode* node, | 481 void BookmarkModel::SetDateAdded(const BookmarkNode* node, |
471 Time date_added) { | 482 Time date_added) { |
472 if (!node) { | 483 if (!node) { |
473 NOTREACHED(); | 484 NOTREACHED(); |
474 return; | 485 return; |
475 } | 486 } |
476 | 487 |
(...skipping 20 matching lines...) Expand all Loading... | |
497 std::vector<const BookmarkNode*>* nodes) { | 508 std::vector<const BookmarkNode*>* nodes) { |
498 base::AutoLock url_lock(url_lock_); | 509 base::AutoLock url_lock(url_lock_); |
499 BookmarkNode tmp_node(url); | 510 BookmarkNode tmp_node(url); |
500 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(&tmp_node); | 511 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(&tmp_node); |
501 while (i != nodes_ordered_by_url_set_.end() && (*i)->url() == url) { | 512 while (i != nodes_ordered_by_url_set_.end() && (*i)->url() == url) { |
502 nodes->push_back(*i); | 513 nodes->push_back(*i); |
503 ++i; | 514 ++i; |
504 } | 515 } |
505 } | 516 } |
506 | 517 |
518 void BookmarkModel::GetNodesByIconURL(const GURL& icon_url, | |
519 std::vector<const BookmarkNode*>* nodes) { | |
520 // TODO: Do something more efficient if this gets called a lot | |
sky
2015/05/22 03:09:06
Any idea how often this will be called? Might a sy
pkotwicz
2015/05/22 16:00:39
Unfortunately, this is called more often than I ex
| |
521 base::AutoLock url_lock(url_lock_); | |
522 for (const BookmarkNode* node : nodes_ordered_by_url_set_) { | |
523 if (node->icon_url() == icon_url) | |
524 nodes->push_back(node); | |
525 } | |
526 } | |
527 | |
507 const BookmarkNode* BookmarkModel::GetMostRecentlyAddedUserNodeForURL( | 528 const BookmarkNode* BookmarkModel::GetMostRecentlyAddedUserNodeForURL( |
508 const GURL& url) { | 529 const GURL& url) { |
509 std::vector<const BookmarkNode*> nodes; | 530 std::vector<const BookmarkNode*> nodes; |
510 GetNodesByURL(url, &nodes); | 531 GetNodesByURL(url, &nodes); |
511 std::sort(nodes.begin(), nodes.end(), &MoreRecentlyAdded); | 532 std::sort(nodes.begin(), nodes.end(), &MoreRecentlyAdded); |
512 | 533 |
513 // Look for the first node that the user can edit. | 534 // Look for the first node that the user can edit. |
514 for (size_t i = 0; i < nodes.size(); ++i) { | 535 for (size_t i = 0; i < nodes.size(); ++i) { |
515 if (client_->CanBeEditedByUser(nodes[i])) | 536 if (client_->CanBeEditedByUser(nodes[i])) |
516 return nodes[i]; | 537 return nodes[i]; |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1049 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( | 1070 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( |
1050 bb_node, | 1071 bb_node, |
1051 other_node, | 1072 other_node, |
1052 mobile_node, | 1073 mobile_node, |
1053 client_->GetLoadExtraNodesCallback(), | 1074 client_->GetLoadExtraNodesCallback(), |
1054 new BookmarkIndex(client_, accept_languages), | 1075 new BookmarkIndex(client_, accept_languages), |
1055 next_node_id_)); | 1076 next_node_id_)); |
1056 } | 1077 } |
1057 | 1078 |
1058 } // namespace bookmarks | 1079 } // namespace bookmarks |
OLD | NEW |