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

Side by Side Diff: chrome/browser/ui/bookmarks/bookmark_utils.cc

Issue 1203713002: Limit access to ChromeBookmarkClient to bookmarks code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cleanup_bookmark_client
Patch Set: Rebase Created 5 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
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 "chrome/browser/ui/bookmarks/bookmark_utils.h" 5 #include "chrome/browser/ui/bookmarks/bookmark_utils.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 } 380 }
381 381
382 int GetBookmarkDragOperation(content::BrowserContext* browser_context, 382 int GetBookmarkDragOperation(content::BrowserContext* browser_context,
383 const BookmarkNode* node) { 383 const BookmarkNode* node) {
384 PrefService* prefs = user_prefs::UserPrefs::Get(browser_context); 384 PrefService* prefs = user_prefs::UserPrefs::Get(browser_context);
385 Profile* profile = Profile::FromBrowserContext(browser_context); 385 Profile* profile = Profile::FromBrowserContext(browser_context);
386 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile); 386 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile);
387 387
388 int move = ui::DragDropTypes::DRAG_MOVE; 388 int move = ui::DragDropTypes::DRAG_MOVE;
389 if (!prefs->GetBoolean(bookmarks::prefs::kEditBookmarksEnabled) || 389 if (!prefs->GetBoolean(bookmarks::prefs::kEditBookmarksEnabled) ||
390 !model->client()->CanBeEditedByUser(node)) { 390 !model->CanBeEditedByUser(node)) {
391 move = ui::DragDropTypes::DRAG_NONE; 391 move = ui::DragDropTypes::DRAG_NONE;
392 } 392 }
393 if (node->is_url()) 393 if (node->is_url())
394 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK | move; 394 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK | move;
395 return ui::DragDropTypes::DRAG_COPY | move; 395 return ui::DragDropTypes::DRAG_COPY | move;
396 } 396 }
397 397
398 int GetPreferredBookmarkDropOperation(int source_operations, int operations) { 398 int GetPreferredBookmarkDropOperation(int source_operations, int operations) {
399 int common_ops = (source_operations & operations); 399 int common_ops = (source_operations & operations);
400 if (!common_ops) 400 if (!common_ops)
(...skipping 15 matching lines...) Expand all
416 const base::FilePath& profile_path = profile->GetPath(); 416 const base::FilePath& profile_path = profile->GetPath();
417 417
418 if (data.IsFromProfilePath(profile_path) && data.size() > 1) 418 if (data.IsFromProfilePath(profile_path) && data.size() > 1)
419 // Currently only accept one dragged node at a time. 419 // Currently only accept one dragged node at a time.
420 return ui::DragDropTypes::DRAG_NONE; 420 return ui::DragDropTypes::DRAG_NONE;
421 421
422 if (!IsValidBookmarkDropLocation(profile, data, parent, index)) 422 if (!IsValidBookmarkDropLocation(profile, data, parent, index))
423 return ui::DragDropTypes::DRAG_NONE; 423 return ui::DragDropTypes::DRAG_NONE;
424 424
425 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile); 425 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile);
426 if (!model->client()->CanBeEditedByUser(parent)) 426 if (!model->CanBeEditedByUser(parent))
427 return ui::DragDropTypes::DRAG_NONE; 427 return ui::DragDropTypes::DRAG_NONE;
428 428
429 const BookmarkNode* dragged_node = 429 const BookmarkNode* dragged_node =
430 data.GetFirstNode(model, profile->GetPath()); 430 data.GetFirstNode(model, profile->GetPath());
431 if (dragged_node) { 431 if (dragged_node) {
432 // User is dragging from this profile. 432 // User is dragging from this profile.
433 if (!model->client()->CanBeEditedByUser(dragged_node)) { 433 if (!model->CanBeEditedByUser(dragged_node)) {
434 // Do a copy instead of a move when dragging bookmarks that the user can't 434 // Do a copy instead of a move when dragging bookmarks that the user can't
435 // modify. 435 // modify.
436 return ui::DragDropTypes::DRAG_COPY; 436 return ui::DragDropTypes::DRAG_COPY;
437 } 437 }
438 return ui::DragDropTypes::DRAG_MOVE; 438 return ui::DragDropTypes::DRAG_MOVE;
439 } 439 }
440 440
441 // User is dragging from another app, copy. 441 // User is dragging from another app, copy.
442 return GetPreferredBookmarkDropOperation(event.source_operations(), 442 return GetPreferredBookmarkDropOperation(event.source_operations(),
443 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK); 443 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK);
444 } 444 }
445 445
446 bool IsValidBookmarkDropLocation(Profile* profile, 446 bool IsValidBookmarkDropLocation(Profile* profile,
447 const bookmarks::BookmarkNodeData& data, 447 const bookmarks::BookmarkNodeData& data,
448 const BookmarkNode* drop_parent, 448 const BookmarkNode* drop_parent,
449 int index) { 449 int index) {
450 if (!drop_parent->is_folder()) { 450 if (!drop_parent->is_folder()) {
451 NOTREACHED(); 451 NOTREACHED();
452 return false; 452 return false;
453 } 453 }
454 454
455 if (!data.is_valid()) 455 if (!data.is_valid())
456 return false; 456 return false;
457 457
458 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile); 458 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile);
459 if (!model->client()->CanBeEditedByUser(drop_parent)) 459 if (!model->CanBeEditedByUser(drop_parent))
460 return false; 460 return false;
461 461
462 const base::FilePath& profile_path = profile->GetPath(); 462 const base::FilePath& profile_path = profile->GetPath();
463 if (data.IsFromProfilePath(profile_path)) { 463 if (data.IsFromProfilePath(profile_path)) {
464 std::vector<const BookmarkNode*> nodes = data.GetNodes(model, profile_path); 464 std::vector<const BookmarkNode*> nodes = data.GetNodes(model, profile_path);
465 for (size_t i = 0; i < nodes.size(); ++i) { 465 for (size_t i = 0; i < nodes.size(); ++i) {
466 // Don't allow the drop if the user is attempting to drop on one of the 466 // Don't allow the drop if the user is attempting to drop on one of the
467 // nodes being dragged. 467 // nodes being dragged.
468 const BookmarkNode* node = nodes[i]; 468 const BookmarkNode* node = nodes[i];
469 int node_index = (drop_parent == node->parent()) ? 469 int node_index = (drop_parent == node->parent()) ?
470 drop_parent->GetIndexOf(nodes[i]) : -1; 470 drop_parent->GetIndexOf(nodes[i]) : -1;
471 if (node_index != -1 && (index == node_index || index == node_index + 1)) 471 if (node_index != -1 && (index == node_index || index == node_index + 1))
472 return false; 472 return false;
473 473
474 // drop_parent can't accept a child that is an ancestor. 474 // drop_parent can't accept a child that is an ancestor.
475 if (drop_parent->HasAncestor(node)) 475 if (drop_parent->HasAncestor(node))
476 return false; 476 return false;
477 } 477 }
478 return true; 478 return true;
479 } 479 }
480 // From another profile, always accept. 480 // From another profile, always accept.
481 return true; 481 return true;
482 } 482 }
483 483
484 } // namespace chrome 484 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698