172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/ntp_resource_cache.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <algorithm> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/command_line.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted_memory.h" 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h" 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/time.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/google/google_util.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/metrics/user_metrics.h" 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h" 2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service.h" 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service_factory.h" 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/chrome_url_data_manager.h" 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/shown_sections_handler.h" 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/web_resource/promo_resource_service.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_constants.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/jstemplate_builder.h" 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/pref_names.h" 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/browser_resources.h" 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/chromium_strings.h" 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/locale_settings.h" 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h" 413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/animation.h" 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/theme_provider.h" 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/color_utils.h" 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) || defined(TOOLKIT_VIEWS) 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_MACOSX) 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h" 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_POSIX) 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/gtk/bookmarks/bookmark_bar_gtk.h" 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing base::Time; 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The URL for the the Learn More page shown on incognito new tab. 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kLearnMoreIncognitoUrl[] = 614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#if defined(OS_CHROMEOS) 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chromeos/bin/answer.py?answer=95464"; 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#else 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chrome/bin/answer.py?answer=95464"; 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// The URL for the Learn More page shown on guest session new tab. 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochconst char kLearnMoreGuestSessionUrl[] = 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chromeos/bin/answer.py?answer=1057090"; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The URL for bookmark sync service help. 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kSyncServiceHelpUrl[] = 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chrome/bin/answer.py?answer=165139"; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The URL to be loaded to display Help. 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kHelpContentUrl[] = 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "https://www.google.com/support/chrome/"; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstring16 GetUrlWithLang(const GURL& url) { 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ASCIIToUTF16(google_util::AppendGoogleLocaleParam(url).spec()); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string SkColorToRGBAString(SkColor color) { 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We convert the alpha using DoubleToString because StringPrintf will use 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // locale specific formatters (e.g., use , instead of . in German). 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return StringPrintf("rgba(%d,%d,%d,%s)", SkColorGetR(color), 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColorGetG(color), SkColorGetB(color), 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::DoubleToString(SkColorGetA(color) / 255.0).c_str()); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Get the CSS string for the background position on the new tab page for the 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// states when the bar is attached or detached. 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstd::string GetNewTabBackgroundCSS(const ui::ThemeProvider* theme_provider, 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool bar_attached) { 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int alignment; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch theme_provider->GetDisplayProperty( 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService::NTP_BACKGROUND_ALIGNMENT, &alignment); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(glen): This is a quick workaround to hide the notused.png image when 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // no image is provided - we don't have time right now to figure out why 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // this is painting as white. 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // http://crbug.com/17593 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!theme_provider->HasCustomImage(IDR_THEME_NTP_BACKGROUND)) { 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "-64px"; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (bar_attached) 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return ThemeService::AlignmentToString(alignment); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The bar is detached, so we must offset the background by the bar size 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // if it's a top-aligned bar. 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) || defined(TOOLKIT_VIEWS) 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int offset = BookmarkBarView::kNewtabBarHeight; 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_MACOSX) 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int offset = bookmarks::kNTPBookmarkBarHeight; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_POSIX) 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int offset = BookmarkBarGtk::kBookmarkBarNTPHeight; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int offset = 0; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (alignment & ThemeService::ALIGN_TOP) { 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (alignment & ThemeService::ALIGN_LEFT) 1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return "0% " + base::IntToString(-offset) + "px"; 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen else if (alignment & ThemeService::ALIGN_RIGHT) 1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return "100% " + base::IntToString(-offset) + "px"; 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return "center " + base::IntToString(-offset) + "px"; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return ThemeService::AlignmentToString(alignment); 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// How the background image on the new tab page should be tiled (see tiling 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// masks in theme_service.h). 13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstd::string GetNewTabBackgroundTilingCSS( 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ui::ThemeProvider* theme_provider) { 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int repeat_mode; 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch theme_provider->GetDisplayProperty( 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService::NTP_BACKGROUND_TILING, &repeat_mode); 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return ThemeService::TilingToString(repeat_mode); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 142201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Is the current time within a given date range? 143201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochbool InDateRange(double begin, double end) { 144201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Time start_time = Time::FromDoubleT(begin); 145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Time end_time = Time::FromDoubleT(end); 146201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return start_time < Time::Now() && end_time > Time::Now(); 147201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochNTPResourceCache::NTPResourceCache(Profile* profile) : profile_(profile) { 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 154dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen registrar_.Add(this, NotificationType::PROMO_RESOURCE_STATE_CHANGED, 155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationService::AllSources()); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Watch for pref changes that cause us to need to invalidate the HTML cache. 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pref_change_registrar_.Init(profile_->GetPrefs()); 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pref_change_registrar_.Add(prefs::kShowBookmarkBar, this); 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pref_change_registrar_.Add(prefs::kEnableBookmarkBar, this); 1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pref_change_registrar_.Add(prefs::kNTPShownSections, this); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickNTPResourceCache::~NTPResourceCache() {} 165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenRefCountedBytes* NTPResourceCache::GetNewTabHTML(bool is_incognito) { 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (is_incognito) { 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!new_tab_incognito_html_.get()) 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateNewTabIncognitoHTML(); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!new_tab_html_.get()) 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateNewTabHTML(); 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return is_incognito ? new_tab_incognito_html_.get() 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : new_tab_html_.get(); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenRefCountedBytes* NTPResourceCache::GetNewTabCSS(bool is_incognito) { 180731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (is_incognito) { 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!new_tab_incognito_css_.get()) 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateNewTabIncognitoCSS(); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!new_tab_css_.get()) 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateNewTabCSS(); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return is_incognito ? new_tab_incognito_css_.get() 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : new_tab_css_.get(); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NTPResourceCache::Observe(NotificationType type, 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, const NotificationDetails& details) { 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invalidate the cache. 195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (NotificationType::BROWSER_THEME_CHANGED == type || 196dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NotificationType::PROMO_RESOURCE_STATE_CHANGED == type) { 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_html_ = NULL; 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_html_ = NULL; 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_css_ = NULL; 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_css_ = NULL; 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (NotificationType::PREF_CHANGED == type) { 2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string* pref_name = Details<std::string>(details).ptr(); 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (*pref_name == prefs::kShowBookmarkBar || 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *pref_name == prefs::kEnableBookmarkBar || 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *pref_name == prefs::kHomePageIsNewTabPage || 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *pref_name == prefs::kNTPShownSections) { 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_html_ = NULL; 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_html_ = NULL; 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NTPResourceCache::CreateNewTabIncognitoHTML() { 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue localized_strings; 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("title", 2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE)); 2214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int new_tab_message_ids = IDS_NEW_TAB_OTR_MESSAGE; 2224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int new_tab_html_idr = IDR_INCOGNITO_TAB_HTML; 2234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const char* new_tab_link = kLearnMoreIncognitoUrl; 2244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // TODO(altimofeev): consider implementation without 'if def' usage. 2254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#if defined(OS_CHROMEOS) 2264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) { 2274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch new_tab_message_ids = IDS_NEW_TAB_GUEST_SESSION_MESSAGE; 2284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch new_tab_html_idr = IDR_GUEST_SESSION_TAB_HTML; 2294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch new_tab_link = kLearnMoreGuestSessionUrl; 2304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 2314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif 2323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("content", 2334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch l10n_util::GetStringFUTF16(new_tab_message_ids, 2344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch GetUrlWithLang(GURL(new_tab_link)))); 2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("extensionsmessage", 2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringFUTF16(IDS_NEW_TAB_OTR_EXTENSIONS_MESSAGE, 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_PRODUCT_NAME), 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASCIIToUTF16(chrome::kChromeUIExtensionsURL))); 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool bookmark_bar_attached = profile_->GetPrefs()->GetBoolean( 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch prefs::kShowBookmarkBar); 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("bookmarkbarattached", 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_bar_attached ? "true" : "false"); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeURLDataManager::DataSource::SetFontAndTextDirection(&localized_strings); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const base::StringPiece incognito_tab_html( 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceBundle::GetSharedInstance().GetRawDataResource( 2484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch new_tab_html_idr)); 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string full_html = jstemplate_builder::GetI18nTemplateHtml( 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch incognito_tab_html, &localized_strings); 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_html_ = new RefCountedBytes; 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_html_->data.resize(full_html.size()); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::copy(full_html.begin(), full_html.end(), 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_html_->data.begin()); 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NTPResourceCache::CreateNewTabHTML() { 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Show the profile name in the title and most visited labels if the current 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // profile is not the default. 2623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick string16 apps = l10n_util::GetStringUTF16(IDS_NEW_TAB_APPS); 2633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick string16 title = l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE); 2643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick string16 most_visited = l10n_util::GetStringUTF16(IDS_NEW_TAB_MOST_VISITED); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue localized_strings; 2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("bookmarkbarattached", 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar) ? 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "true" : "false"); 2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("hasattribution", 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeServiceFactory::GetForProfile(profile_)->HasCustomImage( 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDR_THEME_NTP_ATTRIBUTION) ? 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "true" : "false"); 2733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("apps", apps); 2743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("title", title); 2753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("mostvisited", most_visited); 2763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("restorethumbnails", 2773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_RESTORE_THUMBNAILS_LINK)); 2783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("recentlyclosed", 2793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_RECENTLY_CLOSED)); 2803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("closedwindowsingle", 2813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_RECENTLY_CLOSED_WINDOW_SINGLE)); 282731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick localized_strings.SetString("foreignsessions", 283731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick l10n_util::GetStringUTF16(IDS_SYNC_DATATYPE_SESSIONS)); 2843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("closedwindowmultiple", 2853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_RECENTLY_CLOSED_WINDOW_MULTIPLE)); 2863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("attributionintro", 2873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_ATTRIBUTION_INTRO)); 2883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("thumbnailremovednotification", 2893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_THUMBNAIL_REMOVED_NOTIFICATION)); 2903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("undothumbnailremove", 2913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_UNDO_THUMBNAIL_REMOVE)); 2923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("removethumbnailtooltip", 2933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_REMOVE_THUMBNAIL_TOOLTIP)); 2943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("pinthumbnailtooltip", 2953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_PIN_THUMBNAIL_TOOLTIP)); 2963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("unpinthumbnailtooltip", 2973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_UNPIN_THUMBNAIL_TOOLTIP)); 2983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("showhidethumbnailtooltip", 2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_SHOW_HIDE_THUMBNAIL_TOOLTIP)); 3003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("showhidelisttooltip", 3013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_SHOW_HIDE_LIST_TOOLTIP)); 3023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("pagedisplaytooltip", 3033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_PAGE_DISPLAY_TOOLTIP)); 3043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("closefirstrunnotification", 3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_CLOSE_FIRST_RUN_NOTIFICATION)); 3063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("close", l10n_util::GetStringUTF16(IDS_CLOSE)); 3073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("history", 3083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_HISTORY)); 3093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("downloads", 3103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_DOWNLOADS)); 3113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("help", 3123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_HELP)); 3133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("helpurl", 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetUrlWithLang(GURL(kHelpContentUrl))); 3153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("appsettings", 3163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_SETTINGS)); 3173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("appuninstall", 3183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_UNINSTALL)); 3193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("appoptions", 3203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_OPTIONS)); 321201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch localized_strings.SetString("appcreateshortcut", 322201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_CREATE_SHORTCUT)); 3233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("applaunchtypepinned", 3243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_PINNED)); 3253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("applaunchtyperegular", 3263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_REGULAR)); 327201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch localized_strings.SetString("applaunchtypewindow", 328201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_WINDOW)); 3293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("applaunchtypefullscreen", 3303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_FULLSCREEN)); 3313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("web_store_title", 3323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE)); 3333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("web_store_url", 334731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetUrlWithLang(GURL(Extension::ChromeStoreLaunchURL()))); 33572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen localized_strings.SetString("syncpromotext", 33672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen l10n_util::GetStringUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL)); 337201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#if defined(OS_CHROMEOS) 338201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch localized_strings.SetString("expandMenu", 339201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch l10n_util::GetStringUTF16(IDS_NEW_TAB_CLOSE_MENU_EXPAND)); 340201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#endif 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Don't initiate the sync related message passing with the page if the sync 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // code is not present. 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (profile_->GetProfileSyncService()) 3453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("syncispresent", "true"); 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else 3473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("syncispresent", "false"); 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeURLDataManager::DataSource::SetFontAndTextDirection(&localized_strings); 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Control fade and resize animations. 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string anim = 3533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ui::Animation::ShouldRenderRichAnimation() ? "true" : "false"; 3543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("anim", anim); 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Pass the shown_sections pref early so that we can prevent flicker. 3573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const int shown_sections = ShownSectionsHandler::GetShownSections( 3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick profile_->GetPrefs()); 3593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetInteger("shown_sections", shown_sections); 3603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // If the user has preferences for a start and end time for a custom logo, 3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // and the time now is between these two times, show the custom logo. 3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (profile_->GetPrefs()->FindPreference(prefs::kNTPCustomLogoStart) && 3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick profile_->GetPrefs()->FindPreference(prefs::kNTPCustomLogoEnd)) { 3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("customlogo", 36672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InDateRange(profile_->GetPrefs()->GetDouble(prefs::kNTPCustomLogoStart), 36772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen profile_->GetPrefs()->GetDouble(prefs::kNTPCustomLogoEnd)) ? 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "true" : "false"); 3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else { 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick localized_strings.SetString("customlogo", "false"); 3713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 373201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // If the user has preferences for a start and end time for a promo from 374201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // the server, and this promo string exists, set the localized string. 375201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (profile_->GetPrefs()->FindPreference(prefs::kNTPPromoStart) && 376201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch profile_->GetPrefs()->FindPreference(prefs::kNTPPromoEnd) && 377201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch profile_->GetPrefs()->FindPreference(prefs::kNTPPromoLine) && 378dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen PromoResourceServiceUtil::CanShowPromo(profile_)) { 379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch localized_strings.SetString("serverpromo", 38072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InDateRange(profile_->GetPrefs()->GetDouble(prefs::kNTPPromoStart), 38172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen profile_->GetPrefs()->GetDouble(prefs::kNTPPromoEnd)) ? 382201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch profile_->GetPrefs()->GetString(prefs::kNTPPromoLine) : 383201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string()); 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UserMetrics::RecordAction(UserMetricsAction("NTPPromoShown")); 385201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Load the new tab page appropriate for this build 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Note that some builds (eg. TOUCHUI) don't make use of everything we 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // do here (all of the template data, etc.), but we keep the back end 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // consistent across builds, supporting the union of all NTP front-ends 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // for simplicity. 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string full_html; 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewTabPage4)) { 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::StringPiece new_tab_html(ResourceBundle::GetSharedInstance(). 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetRawDataResource(IDR_NEW_TAB_4_HTML)); 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen full_html = jstemplate_builder::GetI18nTemplateHtml(new_tab_html, 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &localized_strings); 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::StringPiece new_tab_html(ResourceBundle::GetSharedInstance(). 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetRawDataResource(IDR_NEW_TAB_HTML)); 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Inject the template data into the HTML so that it is available before any 403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // layout is needed. 404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string json_html; 405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen jstemplate_builder::AppendJsonHtml(&localized_strings, &json_html); 406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const base::StringPiece template_data_placeholder( 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "<!-- template data placeholder -->"); 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t pos = new_tab_html.find(template_data_placeholder); 410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (pos != base::StringPiece::npos) { 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen full_html.assign(new_tab_html.data(), pos); 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen full_html.append(json_html); 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t after_offset = pos + template_data_placeholder.size(); 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen full_html.append(new_tab_html.data() + after_offset, 416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new_tab_html.size() - after_offset); 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen full_html.assign(new_tab_html.data(), new_tab_html.size()); 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_html_ = new RefCountedBytes; 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_html_->data.resize(full_html.size()); 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::copy(full_html.begin(), full_html.end(), new_tab_html_->data.begin()); 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NTPResourceCache::CreateNewTabIncognitoCSS() { 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui::ThemeProvider* tp = ThemeServiceFactory::GetForProfile(profile_); 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(tp); 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get our theme colors 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_background = 434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_BACKGROUND); 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Generate the replacements. 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<std::string> subst; 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cache-buster for background. 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back( 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetPrefs()->GetString(prefs::kCurrentThemeID)); // $1 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Colors. 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(SkColorToRGBAString(color_background)); // $2 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(GetNewTabBackgroundCSS(tp, false)); // $3 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(GetNewTabBackgroundCSS(tp, true)); // $4 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(GetNewTabBackgroundTilingCSS(tp)); // $5 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get our template. 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const base::StringPiece new_tab_theme_css( 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceBundle::GetSharedInstance().GetRawDataResource( 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDR_NEW_INCOGNITO_TAB_THEME_CSS)); 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create the string from our template and the replacements. 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string full_css = ReplaceStringPlaceholders( 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_theme_css, subst, NULL); 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_css_ = new RefCountedBytes; 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_css_->data.resize(full_css.size()); 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::copy(full_css.begin(), full_css.end(), 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_incognito_css_->data.begin()); 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NTPResourceCache::CreateNewTabCSS() { 465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui::ThemeProvider* tp = ThemeServiceFactory::GetForProfile(profile_); 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(tp); 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get our theme colors 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_background = 470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_BACKGROUND); 471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SkColor color_text = tp->GetColor(ThemeService::COLOR_NTP_TEXT); 472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SkColor color_link = tp->GetColor(ThemeService::COLOR_NTP_LINK); 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_link_underline = 474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_LINK_UNDERLINE); 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_section = 477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION); 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_section_text = 479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_TEXT); 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_section_link = 481ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_LINK); 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_section_link_underline = 483ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_LINK_UNDERLINE); 4843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor color_section_header_text = 485ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_HEADER_TEXT); 4863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor color_section_header_text_hover = 487ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_HEADER_TEXT_HOVER); 4883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor color_section_header_rule = 489ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_HEADER_RULE); 4903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColor color_section_header_rule_light = 491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_SECTION_HEADER_RULE_LIGHT); 492731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SkColor color_text_light = 493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_TEXT_LIGHT); 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_header = 496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tp->GetColor(ThemeService::COLOR_NTP_HEADER); 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Generate a lighter color for the header gradients. 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch color_utils::HSL header_lighter; 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch color_utils::SkColorToHSL(color_header, &header_lighter); 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch header_lighter.l += (1 - header_lighter.l) * 0.33; 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_header_gradient_light = 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch color_utils::HSLToSkColor(header_lighter, SkColorGetA(color_header)); 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Generate section border color from the header color. See 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // BookmarkBarView::Paint for how we do this for the bookmark bar 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // borders. 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColor color_section_border = 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColorSetARGB(80, 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColorGetR(color_header), 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColorGetG(color_header), 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkColorGetB(color_header)); 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Generate the replacements. 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<std::string> subst; 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A second list of replacements, each of which must be in $$x format, 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // where x is a digit from 1-9. 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<std::string> subst2; 5183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::vector<std::string> subst3; 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cache-buster for background. 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back( 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->GetPrefs()->GetString(prefs::kCurrentThemeID)); // $1 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Colors. 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(SkColorToRGBAString(color_background)); // $2 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(GetNewTabBackgroundCSS(tp, false)); // $3 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(GetNewTabBackgroundCSS(tp, true)); // $4 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(GetNewTabBackgroundTilingCSS(tp)); // $5 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(SkColorToRGBAString(color_header)); // $6 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(SkColorToRGBAString(color_header_gradient_light)); // $7 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(SkColorToRGBAString(color_text)); // $8 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst.push_back(SkColorToRGBAString(color_link)); // $9 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst2.push_back(SkColorToRGBAString(color_section)); // $$1 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst2.push_back(SkColorToRGBAString(color_section_border)); // $$2 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst2.push_back(SkColorToRGBAString(color_section_text)); // $$3 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch subst2.push_back(SkColorToRGBAString(color_section_link)); // $$4 5383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst2.push_back(SkColorToRGBAString(color_link_underline)); // $$5 5393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst2.push_back(SkColorToRGBAString(color_section_link_underline)); // $$6 5403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst2.push_back(SkColorToRGBAString(color_section_header_text)); // $$7 5413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst2.push_back(SkColorToRGBAString( 5423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick color_section_header_text_hover)); // $$8 5433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst2.push_back(SkColorToRGBAString(color_section_header_rule)); // $$9 5443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst3.push_back(SkColorToRGBAString( 5463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick color_section_header_rule_light)); // $$$1 5473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick subst3.push_back(SkColorToRGBAString( 5483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkColorSetA(color_section_header_rule, 0))); // $$$2 549731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick subst3.push_back(SkColorToRGBAString(color_text_light)); // $$$3 5503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get our template. 552ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int ntp_css_resource_id = 553ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewTabPage4) ? 554ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDR_NEW_TAB_4_THEME_CSS : IDR_NEW_TAB_THEME_CSS; 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const base::StringPiece new_tab_theme_css( 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceBundle::GetSharedInstance().GetRawDataResource( 557ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ntp_css_resource_id)); 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create the string from our template and the replacements. 5603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string css_string; 5613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick css_string = ReplaceStringPlaceholders(new_tab_theme_css, subst, NULL); 5623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick css_string = ReplaceStringPlaceholders(css_string, subst2, NULL); 5633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick css_string = ReplaceStringPlaceholders(css_string, subst3, NULL); 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_css_ = new RefCountedBytes; 5663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick new_tab_css_->data.resize(css_string.size()); 5673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::copy(css_string.begin(), css_string.end(), 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_css_->data.begin()); 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 570