15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utility> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/browser_prefs.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/web_resource/notification_promo.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/web_resource/promo_resource_service.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/url_constants.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/icu/source/i18n/unicode/smpdtfmt.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochconst char kDateFormat[] = "dd MMM yyyy HH:mm:ss zzzz"; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool YearFromNow(double* date_epoch, std::string* date_string) { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *date_epoch = (base::Time::Now() + base::TimeDelta::FromDays(365)).ToTimeT(); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icu::SimpleDateFormat simple_formatter(icu::UnicodeString(kDateFormat), 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icu::Locale("en_US"), 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!U_SUCCESS(status)) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icu::UnicodeString date_unicode_string; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) simple_formatter.format(static_cast<UDate>(*date_epoch * 1000), 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) date_unicode_string, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!U_SUCCESS(status)) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::UTF16ToUTF8(date_unicode_string.getBuffer(), 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<size_t>(date_unicode_string.length()), 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) date_string); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PromoResourceServiceTest : public testing::Test { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |promo_resource_service_| must be created after |local_state_|. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PromoResourceServiceTest() 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : local_state_(TestingBrowserProcess::GetGlobal()), 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) promo_resource_service_(new PromoResourceService) {} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedTestingLocalState local_state_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<PromoResourceService> promo_resource_service_; 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop loop_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NotificationPromoTest { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromoTest() 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : received_notification_(false), 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_(0.0), 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end_(0.0), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_groups_(0), 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_segment_(0), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) increment_(1), 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_slice_(0), 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_group_(0), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_views_(0), 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) closed_(false) {} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(const std::string& json, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& promo_text, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double start, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_groups, int initial_segment, int increment, 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int time_slice, int max_group, int max_views) { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double year_from_now_epoch; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string year_from_now_string; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(YearFromNow(&year_from_now_epoch, &year_from_now_string)); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> replacements; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) replacements.push_back(year_from_now_string); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string json_with_end_date( 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReplaceStringPlaceholders(json, replacements, NULL)); 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Value* value(base::JSONReader::Read(json_with_end_date)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(value); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* dict = NULL; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->GetAsDictionary(&dict); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(dict); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_json_.reset(dict); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_type_ = NotificationPromo::NTP_NOTIFICATION_PROMO; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_text_ = promo_text; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_ = start; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end_ = year_from_now_epoch; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_groups_ = num_groups; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_segment_ = initial_segment; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) increment_ = increment; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_slice_ = time_slice; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_group_ = max_group; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_views_ = max_views; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) closed_ = false; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) received_notification_ = false; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitPromoFromJson(bool should_receive_notification) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.InitFromJson(*test_json_, promo_type_); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(should_receive_notification, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.new_notification()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the fields. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestNotification(); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestNotification() { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check values. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.promo_text_, promo_text_); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.start_, start_); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.end_, end_); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.num_groups_, num_groups_); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.initial_segment_, initial_segment_); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.increment_, increment_); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.time_slice_, time_slice_); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.max_group_, max_group_); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.max_views_, max_views_); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.closed_, closed_); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check group within bounds. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GE(notification_promo_.group_, 0); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(notification_promo_.group_, num_groups_); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Views should be 0 for now. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.views_, 0); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new NotificationPromo from prefs and compare to current 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notification. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestInitFromPrefs() { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo prefs_notification_promo; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.InitFromPrefs(promo_type_); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.prefs_, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.prefs_); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.promo_text_, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.promo_text_); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.start_, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.start_); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.end_, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.end_); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.num_groups_, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.num_groups_); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.initial_segment_, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.initial_segment_); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.increment_, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.increment_); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.time_slice_, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.time_slice_); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.max_group_, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.max_group_); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.max_views_, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.max_views_); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.group_, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.group_); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.views_, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.views_); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(notification_promo_.closed_, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_notification_promo.closed_); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestGroup() { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test out of range groups. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int incr = num_groups_ / 20; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = max_group_; i < num_groups_; i += incr) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = i; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test in-range groups. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < max_group_; i += incr) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = i; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When max_group_ is 0, all groups pass. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.max_group_ = 0; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < num_groups_; i += incr) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = i; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.WritePrefs(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestViews() { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.views_ = notification_promo_.max_views_ - 2; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.WritePrefs(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo::HandleViewed(promo_type_); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo new_promo; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.InitFromPrefs(promo_type_); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(new_promo.max_views_ - 1, new_promo.views_); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_promo.CanShow()); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo::HandleViewed(promo_type_); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.InitFromPrefs(promo_type_); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(new_promo.max_views_, new_promo.views_); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_promo.CanShow()); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test out of range views. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = max_views_; i < max_views_ * 2; ++i) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.views_ = i; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_promo.CanShow()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test in range views. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < max_views_; ++i) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.views_ = i; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_promo.CanShow()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.WritePrefs(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestClosed() { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo new_promo; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.InitFromPrefs(promo_type_); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_promo.closed_); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_promo.CanShow()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo::HandleClosed(promo_type_); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.InitFromPrefs(promo_type_); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_promo.closed_); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(new_promo.CanShow()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.closed_ = false; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(new_promo.CanShow()); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_promo.WritePrefs(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestPromoText() { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.promo_text_.clear(); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.promo_text_ = promo_text_; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestTime() { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const double now = base::Time::Now().ToDoubleT(); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const double qhour = 15 * 60; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 0; // For simplicity. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ = now - qhour; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.end_ = now + qhour; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start time has not arrived. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ = now + qhour; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.end_ = now + qhour; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // End time has past. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ = now - qhour; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.end_ = now - qhour; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ = start_; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.end_ = end_; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestIncrement() { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const double now = base::Time::Now().ToDoubleT(); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const double slice = 60; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.num_groups_ = 18; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.initial_segment_ = 5; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.increment_ = 3; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.time_slice_ = slice; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ = now - 1; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.end_ = now + slice; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test initial segment. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 4; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 5; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test first increment. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ -= slice; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 7; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 8; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test second increment. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ -= slice; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 10; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 11; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test penultimate increment. 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ -= 2 * slice; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 16; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.group_ = 17; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(notification_promo_.CanShow()); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test last increment. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo_.start_ -= slice; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(notification_promo_.CanShow()); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NotificationPromo& promo() const { return notification_promo_; } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationPromo notification_promo_; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool received_notification_; 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> test_json_; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationPromo::PromoType promo_type_; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string promo_text_; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double start_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double end_; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_groups_; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int initial_segment_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int increment_; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int time_slice_; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_group_; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_views_; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool closed_; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that everything gets parsed correctly, notifications are sent, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and CanShow() is handled correctly under variety of conditions. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Additionally, test that the first string in |strings| is used if 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// no payload.promo_short_message is specified in the JSON response. 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PromoResourceServiceTest, NotificationPromoTest) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that prefs are set correctly. 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromoTest promo_test; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up start date and promo line in a Dictionary as if parsed from the 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service. date[0].end is replaced with a date 1 year in the future. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.Init("{" 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"ntp_notification_promo\": [" 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"date\":" 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " [" 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"start\":\"3 Aug 1999 9:26:06 GMT\"," 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"end\":\"$1\"" 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ]," 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"strings\":" 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"NTP4_HOW_DO_YOU_FEEL_ABOUT_CHROME\":" 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"What do you think of Chrome?\"" 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"grouping\":" 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"buckets\":1000," 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"segment\":200," 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment\":100," 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment_frequency\":3600," 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment_max\":400" 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"payload\":" 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"days_active\":7," 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"install_age_days\":21" 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"max_views\":30" 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ]" 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}", 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "What do you think of Chrome?", 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The starting date is in 1999 to make tests pass 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on Android devices with incorrect or unset date/time. 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 933672366, // unix epoch for 3 Aug 1999 9:26:06 GMT. 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000, 200, 100, 3600, 400, 30); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.InitPromoFromJson(true); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Second time should not trigger a notification. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.InitPromoFromJson(false); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestInitFromPrefs(); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test various conditions of CanShow. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TestGroup Has the side effect of setting us to a passing group. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestGroup(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestViews(); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestClosed(); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestPromoText(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestTime(); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestIncrement(); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that payload.promo_message_short is used if present. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PromoResourceServiceTest, NotificationPromoCompatNoStringsTest) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that prefs are set correctly. 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromoTest promo_test; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up start date and promo line in a Dictionary as if parsed from the 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service. date[0].end is replaced with a date 1 year in the future. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.Init("{" 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"ntp_notification_promo\": [" 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"date\":" 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " [" 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"start\":\"3 Aug 1999 9:26:06 GMT\"," 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"end\":\"$1\"" 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ]," 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"grouping\":" 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"buckets\":1000," 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"segment\":200," 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment\":100," 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment_frequency\":3600," 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment_max\":400" 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"payload\":" 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"promo_message_short\":" 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"What do you think of Chrome?\"," 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"days_active\":7," 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"install_age_days\":21" 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"max_views\":30" 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ]" 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}", 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "What do you think of Chrome?", 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The starting date is in 1999 to make tests pass 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on Android devices with incorrect or unset date/time. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 933672366, // unix epoch for 3 Aug 1999 9:26:06 GMT. 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000, 200, 100, 3600, 400, 30); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.InitPromoFromJson(true); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Second time should not trigger a notification. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.InitPromoFromJson(false); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestInitFromPrefs(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that strings.|payload.promo_message_short| is used if present. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PromoResourceServiceTest, NotificationPromoCompatPayloadStringsTest) { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that prefs are set correctly. 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromoTest promo_test; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up start date and promo line in a Dictionary as if parsed from the 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service. date[0].end is replaced with a date 1 year in the future. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.Init("{" 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"ntp_notification_promo\": [" 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"date\":" 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " [" 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"start\":\"3 Aug 1999 9:26:06 GMT\"," 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"end\":\"$1\"" 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ]," 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"grouping\":" 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"buckets\":1000," 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"segment\":200," 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment\":100," 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment_frequency\":3600," 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"increment_max\":400" 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"strings\":" 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"bogus\":\"string\"," 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"GOOD_STRING\":" 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"What do you think of Chrome?\"" 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"payload\":" 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " {" 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"promo_message_short\":" 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"GOOD_STRING\"," 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"days_active\":7," 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"install_age_days\":21" 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }," 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " \"max_views\":30" 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ]" 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}", 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "What do you think of Chrome?", 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The starting date is in 1999 to make tests pass 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on Android devices with incorrect or unset date/time. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 933672366, // unix epoch for 3 Aug 1999 9:26:06 GMT. 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000, 200, 100, 3600, 400, 30); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.InitPromoFromJson(true); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Second time should not trigger a notification. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.InitPromoFromJson(false); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) promo_test.TestInitFromPrefs(); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PromoResourceServiceTest, PromoServerURLTest) { 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL promo_server_url = NotificationPromo::PromoServerURL(); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(promo_server_url.is_empty()); 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(promo_server_url.is_valid()); 532010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(promo_server_url.SchemeIs(url::kHttpsScheme)); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(achuith): Test this better. 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_APP_LIST) 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(PromoResourceServiceTest, AppLauncherPromoTest) { 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check that prefs are set correctly. 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromoTest promo_test; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up start date and promo line in a Dictionary as if parsed from the 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // service. date[0].end is replaced with a date 1 year in the future. 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) promo_test.Init("{" 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"ntp_notification_promo\": [" 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"date\":" 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " [" 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"start\":\"3 Aug 1999 9:26:06 GMT\"," 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"end\":\"$1\"" 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]," 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"grouping\":" 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"buckets\":1000," 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"segment\":200," 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"increment\":100," 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"increment_frequency\":3600," 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"increment_max\":400" 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"payload\":" 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " {" 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"promo_message_short\":" 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"What do you think of Chrome?\"," 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"days_active\":7," 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"install_age_days\":21," 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"is_app_launcher_promo\":true" 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }," 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " \"max_views\":30" 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " }" 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ]" 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "}", 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "What do you think of Chrome?", 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The starting date is in 1999 to make tests pass 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on Android devices with incorrect or unset date/time. 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 933672366, // unix epoch for 3 Aug 1999 9:26:06 GMT. 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1000, 200, 100, 3600, 400, 30); 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) promo_test.InitPromoFromJson(true); 5794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) local_state_.Get()->SetBoolean(prefs::kAppLauncherIsEnabled, true); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(promo_test.promo().CanShow()); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 583