Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / thumbnails / thumbnail_service_unittest.cc
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/thumbnails/thumbnail_service_impl.h"
6
7 #include "base/memory/ref_counted.h"
8 #include "chrome/browser/history/top_sites_impl.h"
9 #include "chrome/test/base/testing_profile.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 typedef testing::Test ThumbnailServiceTest;
13
14 // A mock version of TopSitesImpl, used for testing
15 // ShouldAcquirePageThumbnail().
16 class MockTopSites : public history::TopSitesImpl {
17  public:
18   explicit MockTopSites(Profile* profile)
19       : history::TopSitesImpl(profile),
20         capacity_(1) {
21   }
22
23   // history::TopSitesImpl overrides.
24   bool IsNonForcedFull() override { return known_url_map_.size() >= capacity_; }
25   bool IsForcedFull() override { return false; }
26   bool IsKnownURL(const GURL& url) override {
27     return known_url_map_.find(url.spec()) != known_url_map_.end();
28   }
29   bool GetPageThumbnailScore(const GURL& url, ThumbnailScore* score) override {
30     std::map<std::string, ThumbnailScore>::const_iterator iter =
31         known_url_map_.find(url.spec());
32     if (iter == known_url_map_.end()) {
33       return false;
34     } else {
35       *score = iter->second;
36       return true;
37     }
38   }
39
40   // Adds a known URL with the associated thumbnail score.
41   void AddKnownURL(const GURL& url, const ThumbnailScore& score) {
42     known_url_map_[url.spec()] = score;
43   }
44
45  private:
46   ~MockTopSites() override {}
47
48   const size_t capacity_;
49   std::map<std::string, ThumbnailScore> known_url_map_;
50
51   DISALLOW_COPY_AND_ASSIGN(MockTopSites);
52 };
53
54 // A mock version of TestingProfile holds MockTopSites.
55 class MockProfile : public TestingProfile {
56  public:
57   MockProfile() : mock_top_sites_(new MockTopSites(this)) {
58   }
59
60   history::TopSites* GetTopSites() override { return mock_top_sites_.get(); }
61
62   void AddKnownURL(const GURL& url, const ThumbnailScore& score) {
63     mock_top_sites_->AddKnownURL(url, score);
64   }
65
66  private:
67   scoped_refptr<MockTopSites> mock_top_sites_;
68
69   DISALLOW_COPY_AND_ASSIGN(MockProfile);
70 };
71
72 TEST_F(ThumbnailServiceTest, ShouldUpdateThumbnail) {
73   const GURL kGoodURL("http://www.google.com/");
74   const GURL kBadURL("chrome://newtab");
75
76   // Set up the mock profile along with mock top sites.
77   base::ScopedTempDir temp_dir;
78   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
79   MockProfile profile;
80
81   scoped_refptr<thumbnails::ThumbnailService> thumbnail_service(
82       new thumbnails::ThumbnailServiceImpl(&profile));
83
84   // Should be false because it's a bad URL.
85   EXPECT_FALSE(thumbnail_service->ShouldAcquirePageThumbnail(kBadURL));
86
87   // Should be true, as it's a good URL.
88   EXPECT_TRUE(thumbnail_service->ShouldAcquirePageThumbnail(kGoodURL));
89
90   // Not checking incognito mode since the service wouldn't have been created
91   // in that case anyway.
92
93   // Add a known URL. This makes the top sites data full.
94   ThumbnailScore bad_score;
95   bad_score.time_at_snapshot = base::Time::UnixEpoch();  // Ancient time stamp.
96   profile.AddKnownURL(kGoodURL, bad_score);
97   ASSERT_TRUE(profile.GetTopSites()->IsNonForcedFull());
98
99   // Should be false, as the top sites data is full, and the new URL is
100   // not known.
101   const GURL kAnotherGoodURL("http://www.youtube.com/");
102   EXPECT_FALSE(thumbnail_service->ShouldAcquirePageThumbnail(kAnotherGoodURL));
103
104   // Should be true, as the existing thumbnail is bad (i.e. need a better one).
105   EXPECT_TRUE(thumbnail_service->ShouldAcquirePageThumbnail(kGoodURL));
106
107   // Replace the thumbnail score with a really good one.
108   ThumbnailScore good_score;
109   good_score.time_at_snapshot = base::Time::Now();  // Very new.
110   good_score.at_top = true;
111   good_score.good_clipping = true;
112   good_score.boring_score = 0.0;
113   good_score.load_completed = true;
114   profile.AddKnownURL(kGoodURL, good_score);
115
116   // Should be false, as the existing thumbnail is good enough (i.e. don't
117   // need to replace the existing thumbnail which is new and good).
118   EXPECT_FALSE(thumbnail_service->ShouldAcquirePageThumbnail(kGoodURL));
119 }