Home | History | Annotate | Download | only in bookmarks
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/bookmarks/bookmark_utils.h"
      6 
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "chrome/test/base/testing_profile.h"
      9 #include "components/bookmarks/browser/bookmark_model.h"
     10 #include "components/bookmarks/test/test_bookmark_client.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 #if !defined(OS_ANDROID) && !defined(OS_IOS)
     14 
     15 using base::ASCIIToUTF16;
     16 
     17 namespace {
     18 
     19 TEST(BookmarkUIUtilsTest, HasBookmarkURLs) {
     20   test::TestBookmarkClient client;
     21   scoped_ptr<BookmarkModel> model(client.CreateModel(false));
     22 
     23   std::vector<const BookmarkNode*> nodes;
     24 
     25   // This tests that |nodes| contains an URL.
     26   const BookmarkNode* page1 = model->AddURL(model->bookmark_bar_node(),
     27                                             0,
     28                                             ASCIIToUTF16("Google"),
     29                                             GURL("http://google.com"));
     30   nodes.push_back(page1);
     31   EXPECT_TRUE(chrome::HasBookmarkURLs(nodes));
     32 
     33   nodes.clear();
     34 
     35   // This tests that |nodes| does not contain any URL.
     36   const BookmarkNode* folder1 =
     37       model->AddFolder(model->bookmark_bar_node(), 0, ASCIIToUTF16("Folder1"));
     38   nodes.push_back(folder1);
     39   EXPECT_FALSE(chrome::HasBookmarkURLs(nodes));
     40 
     41   // This verifies if HasBookmarkURLs iterates through immediate children.
     42   model->AddURL(folder1, 0, ASCIIToUTF16("Foo"), GURL("http://randomsite.com"));
     43   EXPECT_TRUE(chrome::HasBookmarkURLs(nodes));
     44 
     45   // This verifies that HasBookmarkURLS does not iterate through descendants.
     46   // i.e, it should not find an URL inside a two or three level hierarchy.
     47   // So we add another folder to |folder1| and add another page to that new
     48   // folder to create a two level hierarchy.
     49 
     50   // But first we have to remove the URL from |folder1|.
     51   model->Remove(folder1, 0);
     52 
     53   const BookmarkNode* subfolder1 =
     54       model->AddFolder(folder1, 0, ASCIIToUTF16("Subfolder1"));
     55 
     56   // Now add the URL to that |subfolder1|.
     57   model->AddURL(subfolder1, 0, ASCIIToUTF16("BAR"), GURL("http://bar-foo.com"));
     58   EXPECT_FALSE(chrome::HasBookmarkURLs(nodes));
     59 }
     60 
     61 TEST(BookmarkUIUtilsTest, HasBookmarkURLsAllowedInIncognitoMode) {
     62   test::TestBookmarkClient client;
     63   scoped_ptr<BookmarkModel> model(client.CreateModel(false));
     64   TestingProfile profile;
     65 
     66   std::vector<const BookmarkNode*> nodes;
     67 
     68   // This tests that |nodes| contains an disabled-in-incognito URL.
     69   const BookmarkNode* page1 = model->AddURL(model->bookmark_bar_node(),
     70                                             0,
     71                                             ASCIIToUTF16("BookmarkManager"),
     72                                             GURL("chrome://bookmarks"));
     73   nodes.push_back(page1);
     74   EXPECT_FALSE(chrome::HasBookmarkURLsAllowedInIncognitoMode(nodes, &profile));
     75   nodes.clear();
     76 
     77   // This tests that |nodes| contains an URL that can be opened in incognito
     78   // mode.
     79   const BookmarkNode* page2 = model->AddURL(model->bookmark_bar_node(),
     80                                             0,
     81                                             ASCIIToUTF16("Google"),
     82                                             GURL("http://google.com"));
     83   nodes.push_back(page2);
     84   EXPECT_TRUE(chrome::HasBookmarkURLsAllowedInIncognitoMode(nodes, &profile));
     85 
     86   nodes.clear();
     87 
     88   // This tests that |nodes| does not contain any URL.
     89   const BookmarkNode* folder1 =
     90       model->AddFolder(model->bookmark_bar_node(), 0, ASCIIToUTF16("Folder1"));
     91   nodes.push_back(folder1);
     92   EXPECT_FALSE(chrome::HasBookmarkURLsAllowedInIncognitoMode(nodes, &profile));
     93 
     94   // This verifies if HasBookmarkURLsAllowedInIncognitoMode iterates through
     95   // immediate children.
     96   // Add disabled-in-incognito url.
     97   model->AddURL(folder1, 0, ASCIIToUTF16("Foo"), GURL("chrome://bookmarks"));
     98   EXPECT_FALSE(chrome::HasBookmarkURLsAllowedInIncognitoMode(nodes, &profile));
     99   // Add normal url.
    100   model->AddURL(folder1, 0, ASCIIToUTF16("Foo"), GURL("http://randomsite.com"));
    101   EXPECT_TRUE(chrome::HasBookmarkURLsAllowedInIncognitoMode(nodes, &profile));
    102 
    103   // This verifies that HasBookmarkURLsAllowedInIncognitoMode does not iterate
    104   // through descendants.
    105   // i.e, it should not find an URL inside a two or three level hierarchy.
    106   // So we add another folder to |folder1| and add another page to that new
    107   // folder to create a two level hierarchy.
    108 
    109   // But first we have to remove the URL from |folder1|.
    110   model->Remove(folder1, 0);
    111 
    112   const BookmarkNode* subfolder1 =
    113       model->AddFolder(folder1, 0, ASCIIToUTF16("Subfolder1"));
    114 
    115   // Now add the URL to that |subfolder1|.
    116   model->AddURL(subfolder1, 0, ASCIIToUTF16("BAR"), GURL("http://bar-foo.com"));
    117   EXPECT_FALSE(chrome::HasBookmarkURLsAllowedInIncognitoMode(nodes, &profile));
    118 }
    119 
    120 }  // namespace
    121 #endif
    122