| 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 "chrome/browser/search/suggestions/suggestions_service.h" | 5 #include "chrome/browser/search/suggestions/suggestions_service.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <sstream> | 8 #include <sstream> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/metrics/field_trial.h" | 13 #include "base/metrics/field_trial.h" |
| 14 #include "base/prefs/pref_service.h" | 14 #include "base/prefs/pref_service.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "chrome/browser/search/suggestions/blacklist_store.h" | 16 #include "chrome/browser/search/suggestions/blacklist_store.h" |
| 17 #include "chrome/browser/search/suggestions/image_manager.h" |
| 17 #include "chrome/browser/search/suggestions/proto/suggestions.pb.h" | 18 #include "chrome/browser/search/suggestions/proto/suggestions.pb.h" |
| 18 #include "chrome/browser/search/suggestions/suggestions_service_factory.h" | 19 #include "chrome/browser/search/suggestions/suggestions_service_factory.h" |
| 19 #include "chrome/browser/search/suggestions/suggestions_store.h" | 20 #include "chrome/browser/search/suggestions/suggestions_store.h" |
| 20 #include "components/variations/entropy_provider.h" | 21 #include "components/variations/entropy_provider.h" |
| 21 #include "components/variations/variations_associated_data.h" | 22 #include "components/variations/variations_associated_data.h" |
| 22 #include "content/public/test/test_browser_thread_bundle.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
| 23 #include "net/http/http_response_headers.h" | 24 #include "net/http/http_response_headers.h" |
| 24 #include "net/http/http_status_code.h" | 25 #include "net/http/http_status_code.h" |
| 25 #include "net/url_request/test_url_fetcher_factory.h" | 26 #include "net/url_request/test_url_fetcher_factory.h" |
| 26 #include "net/url_request/url_request_status.h" | 27 #include "net/url_request/url_request_status.h" |
| 27 #include "net/url_request/url_request_test_util.h" | 28 #include "net/url_request/url_request_test_util.h" |
| 28 #include "testing/gmock/include/gmock/gmock.h" | 29 #include "testing/gmock/include/gmock/gmock.h" |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" |
| 30 | 31 |
| 31 using testing::DoAll; | 32 using testing::DoAll; |
| 32 using ::testing::Eq; | 33 using ::testing::Eq; |
| 33 using ::testing::Return; | 34 using ::testing::Return; |
| 34 using testing::SetArgPointee; | 35 using testing::SetArgPointee; |
| 36 using ::testing::NiceMock; |
| 35 using ::testing::StrictMock; | 37 using ::testing::StrictMock; |
| 36 using ::testing::_; | 38 using ::testing::_; |
| 37 | 39 |
| 38 namespace { | 40 namespace { |
| 39 | 41 |
| 40 const char kFakeSuggestionsURL[] = "https://mysuggestions.com/proto"; | 42 const char kFakeSuggestionsURL[] = "https://mysuggestions.com/proto"; |
| 41 const char kFakeSuggestionsCommonParams[] = "foo=bar"; | 43 const char kFakeSuggestionsCommonParams[] = "foo=bar"; |
| 42 const char kFakeBlacklistPath[] = "/blacklist"; | 44 const char kFakeBlacklistPath[] = "/blacklist"; |
| 43 const char kFakeBlacklistUrlParam[] = "baz"; | 45 const char kFakeBlacklistUrlParam[] = "baz"; |
| 44 | 46 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 return profile.Pass(); | 95 return profile.Pass(); |
| 94 } | 96 } |
| 95 | 97 |
| 96 class MockSuggestionsStore : public suggestions::SuggestionsStore { | 98 class MockSuggestionsStore : public suggestions::SuggestionsStore { |
| 97 public: | 99 public: |
| 98 MOCK_METHOD1(LoadSuggestions, bool(SuggestionsProfile*)); | 100 MOCK_METHOD1(LoadSuggestions, bool(SuggestionsProfile*)); |
| 99 MOCK_METHOD1(StoreSuggestions, bool(const SuggestionsProfile&)); | 101 MOCK_METHOD1(StoreSuggestions, bool(const SuggestionsProfile&)); |
| 100 MOCK_METHOD0(ClearSuggestions, void()); | 102 MOCK_METHOD0(ClearSuggestions, void()); |
| 101 }; | 103 }; |
| 102 | 104 |
| 103 class MockThumbnailManager : public suggestions::ThumbnailManager { | 105 class MockImageManager : public suggestions::ImageManager { |
| 104 public: | 106 public: |
| 105 MockThumbnailManager() {} | 107 MockImageManager() {} |
| 106 virtual ~MockThumbnailManager() {} | 108 virtual ~MockImageManager() {} |
| 107 MOCK_METHOD1(InitializeThumbnailMap, void(const SuggestionsProfile&)); | 109 MOCK_METHOD1(Initialize, void(const SuggestionsProfile&)); |
| 108 MOCK_METHOD2(GetPageThumbnail, | 110 MOCK_METHOD2(GetImageForURL, |
| 109 void(const GURL&, | 111 void(const GURL&, |
| 110 base::Callback<void(const GURL&, const SkBitmap*)>)); | 112 base::Callback<void(const GURL&, const SkBitmap*)>)); |
| 111 }; | 113 }; |
| 112 | 114 |
| 113 class MockBlacklistStore : public suggestions::BlacklistStore { | 115 class MockBlacklistStore : public suggestions::BlacklistStore { |
| 114 public: | 116 public: |
| 115 MOCK_METHOD1(BlacklistUrl, bool(const GURL&)); | 117 MOCK_METHOD1(BlacklistUrl, bool(const GURL&)); |
| 116 MOCK_METHOD1(GetFirstUrlFromBlacklist, bool(GURL*)); | 118 MOCK_METHOD1(GetFirstUrlFromBlacklist, bool(GURL*)); |
| 117 MOCK_METHOD1(RemoveUrl, bool(const GURL&)); | 119 MOCK_METHOD1(RemoveUrl, bool(const GURL&)); |
| 118 MOCK_METHOD1(FilterSuggestions, void(SuggestionsProfile*)); | 120 MOCK_METHOD1(FilterSuggestions, void(SuggestionsProfile*)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 "Group1", params); | 179 "Group1", params); |
| 178 field_trial_ = base::FieldTrialList::CreateFieldTrial( | 180 field_trial_ = base::FieldTrialList::CreateFieldTrial( |
| 179 kSuggestionsFieldTrialName, "Group1"); | 181 kSuggestionsFieldTrialName, "Group1"); |
| 180 field_trial_->group(); | 182 field_trial_->group(); |
| 181 } | 183 } |
| 182 | 184 |
| 183 // Should not be called more than once per test since it stashes the | 185 // Should not be called more than once per test since it stashes the |
| 184 // SuggestionsStore in |mock_suggestions_store_|. | 186 // SuggestionsStore in |mock_suggestions_store_|. |
| 185 SuggestionsService* CreateSuggestionsServiceWithMocks() { | 187 SuggestionsService* CreateSuggestionsServiceWithMocks() { |
| 186 mock_suggestions_store_ = new StrictMock<MockSuggestionsStore>(); | 188 mock_suggestions_store_ = new StrictMock<MockSuggestionsStore>(); |
| 187 mock_thumbnail_manager_ = new StrictMock<MockThumbnailManager>(); | 189 mock_thumbnail_manager_ = new NiceMock<MockImageManager>(); |
| 188 mock_blacklist_store_ = new MockBlacklistStore(); | 190 mock_blacklist_store_ = new MockBlacklistStore(); |
| 189 return new SuggestionsService( | 191 return new SuggestionsService( |
| 190 request_context_, scoped_ptr<SuggestionsStore>(mock_suggestions_store_), | 192 request_context_, scoped_ptr<SuggestionsStore>(mock_suggestions_store_), |
| 191 scoped_ptr<ThumbnailManager>(mock_thumbnail_manager_), | 193 scoped_ptr<ImageManager>(mock_thumbnail_manager_), |
| 192 scoped_ptr<BlacklistStore>(mock_blacklist_store_)); | 194 scoped_ptr<BlacklistStore>(mock_blacklist_store_)); |
| 193 } | 195 } |
| 194 | 196 |
| 195 void FetchSuggestionsDataNoTimeoutHelper(bool interleaved_requests) { | 197 void FetchSuggestionsDataNoTimeoutHelper(bool interleaved_requests) { |
| 196 // Field trial enabled with a specific suggestions URL. | 198 // Field trial enabled with a specific suggestions URL. |
| 197 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsCommonParams, | 199 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsCommonParams, |
| 198 kFakeBlacklistPath, kFakeBlacklistUrlParam, false); | 200 kFakeBlacklistPath, kFakeBlacklistUrlParam, false); |
| 199 scoped_ptr<SuggestionsService> suggestions_service( | 201 scoped_ptr<SuggestionsService> suggestions_service( |
| 200 CreateSuggestionsServiceWithMocks()); | 202 CreateSuggestionsServiceWithMocks()); |
| 201 EXPECT_TRUE(suggestions_service != NULL); | 203 EXPECT_TRUE(suggestions_service != NULL); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 base::MessageLoop::current()->RunUntilIdle(); | 243 base::MessageLoop::current()->RunUntilIdle(); |
| 242 | 244 |
| 243 // Ensure that CheckSuggestionsData() ran twice. | 245 // Ensure that CheckSuggestionsData() ran twice. |
| 244 EXPECT_EQ(2, suggestions_data_check_count_); | 246 EXPECT_EQ(2, suggestions_data_check_count_); |
| 245 } | 247 } |
| 246 | 248 |
| 247 protected: | 249 protected: |
| 248 net::FakeURLFetcherFactory factory_; | 250 net::FakeURLFetcherFactory factory_; |
| 249 // Only used if the SuggestionsService is built with mocks. Not owned. | 251 // Only used if the SuggestionsService is built with mocks. Not owned. |
| 250 MockSuggestionsStore* mock_suggestions_store_; | 252 MockSuggestionsStore* mock_suggestions_store_; |
| 251 MockThumbnailManager* mock_thumbnail_manager_; | 253 MockImageManager* mock_thumbnail_manager_; |
| 252 MockBlacklistStore* mock_blacklist_store_; | 254 MockBlacklistStore* mock_blacklist_store_; |
| 253 scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 255 scoped_refptr<net::TestURLRequestContextGetter> request_context_; |
| 254 | 256 |
| 255 private: | 257 private: |
| 256 content::TestBrowserThreadBundle thread_bundle_; | 258 content::TestBrowserThreadBundle thread_bundle_; |
| 257 scoped_ptr<base::FieldTrialList> field_trial_list_; | 259 scoped_ptr<base::FieldTrialList> field_trial_list_; |
| 258 scoped_refptr<base::FieldTrial> field_trial_; | 260 scoped_refptr<base::FieldTrial> field_trial_; |
| 259 | 261 |
| 260 DISALLOW_COPY_AND_ASSIGN(SuggestionsServiceTest); | 262 DISALLOW_COPY_AND_ASSIGN(SuggestionsServiceTest); |
| 261 }; | 263 }; |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 // Delay increases on failure. | 488 // Delay increases on failure. |
| 487 suggestions_service->UpdateBlacklistDelay(false); | 489 suggestions_service->UpdateBlacklistDelay(false); |
| 488 EXPECT_GT(suggestions_service->blacklist_delay(), initial_delay); | 490 EXPECT_GT(suggestions_service->blacklist_delay(), initial_delay); |
| 489 | 491 |
| 490 // Delay resets on success. | 492 // Delay resets on success. |
| 491 suggestions_service->UpdateBlacklistDelay(true); | 493 suggestions_service->UpdateBlacklistDelay(true); |
| 492 EXPECT_EQ(initial_delay, suggestions_service->blacklist_delay()); | 494 EXPECT_EQ(initial_delay, suggestions_service->blacklist_delay()); |
| 493 } | 495 } |
| 494 | 496 |
| 495 } // namespace suggestions | 497 } // namespace suggestions |
| OLD | NEW |