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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/ntp/ntp_resource_cache.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted_memory.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_util.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/first_run/first_run.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/themes/theme_properties.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h" 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_util.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_bar_constants.h" 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/sync/sync_promo_ui.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/ntp/new_tab_page_handler.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/ntp/new_tab_ui.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/ntp/ntp_login_handler.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/sync_setup_handler.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/web_resource/notification_promo.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h" 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h" 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension_urls.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/browser_resources.h" 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/components_strings.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/theme_provider.h" 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/jstemplate_builder.h" 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/web_ui_util.h" 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/animation/animation.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/color_utils.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/sys_color_change_listener.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/platform_util.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The URL for the the Learn More page shown on incognito new tab. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLearnMoreIncognitoUrl[] = 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.google.com/support/chromeos/bin/answer.py?answer=95464"; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.google.com/support/chrome/bin/answer.py?answer=95464"; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The URL for the Learn More page shown on guest session new tab. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLearnMoreGuestSessionUrl[] = 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.google.com/support/chromeos/bin/answer.py?answer=1057090"; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SkColorToRGBAString(SkColor color) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We convert the alpha using DoubleToString because StringPrintf will use 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // locale specific formatters (e.g., use , instead of . in German). 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rgba(%d,%d,%d,%s)", 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetR(color), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetG(color), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetB(color), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DoubleToString(SkColorGetA(color) / 255.0).c_str()); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates an rgb string for an SkColor, but leaves the alpha blank so that the 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// css can fill it in. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SkColorToRGBComponents(SkColor color) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "%d,%d,%d", 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetR(color), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetG(color), 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetB(color)); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SkColor GetThemeColor(ui::ThemeProvider* tp, int id) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color = tp->GetColor(id); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If web contents are being inverted because the system is in high-contrast 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode, any system theme colors we use must be inverted too to cancel out. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::IsInvertedColorScheme() ? 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color_utils::InvertColor(color) : color; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get the CSS string for the background position on the new tab page for the 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// states when the bar is attached or detached. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetNewTabBackgroundCSS(const ui::ThemeProvider* theme_provider, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool bar_attached) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(glen): This is a quick workaround to hide the notused.png image when 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no image is provided - we don't have time right now to figure out why 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this is painting as white. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/17593 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!theme_provider->HasCustomImage(IDR_THEME_NTP_BACKGROUND)) { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "-64px"; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int alignment = theme_provider->GetDisplayProperty( 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ThemeProperties::NTP_BACKGROUND_ALIGNMENT); 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (bar_attached) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ThemeProperties::AlignmentToString(alignment); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (alignment & ThemeProperties::ALIGN_TOP) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The bar is detached, so we must offset the background by the bar size 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if it's a top-aligned bar. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int offset = chrome::kNTPBookmarkBarHeight; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (alignment & ThemeProperties::ALIGN_LEFT) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "left " + base::IntToString(-offset) + "px"; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (alignment & ThemeProperties::ALIGN_RIGHT) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "right " + base::IntToString(-offset) + "px"; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "center " + base::IntToString(-offset) + "px"; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ThemeProperties::AlignmentToString(alignment); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// How the background image on the new tab page should be tiled (see tiling 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// masks in theme_service.h). 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetNewTabBackgroundTilingCSS( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::ThemeProvider* theme_provider) { 152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int repeat_mode = theme_provider->GetDisplayProperty( 153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ThemeProperties::NTP_BACKGROUND_TILING); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ThemeProperties::TilingToString(repeat_mode); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NTPResourceCache::NTPResourceCache(Profile* profile) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : profile_(profile), is_swipe_tracking_from_scroll_events_enabled_(false), 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_show_apps_page_(NewTabUI::ShouldShowApps()), 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_show_most_visited_page_(true), 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_show_other_devices_menu_(true), 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_show_recently_closed_menu_(true) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<ThemeService>( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThemeServiceFactory::GetForProfile(profile))); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure callback = base::Bind(&NTPResourceCache::OnPreferenceChanged, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this)); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Watch for pref changes that cause us to need to invalidate the HTML cache. 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_pref_change_registrar_.Init(profile_->GetPrefs()); 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_pref_change_registrar_.Add(bookmarks::prefs::kShowBookmarkBar, 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback); 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_pref_change_registrar_.Add(prefs::kNtpShownPage, callback); 179bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch profile_pref_change_registrar_.Add(prefs::kSignInPromoShowNTPBubble, 180bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch callback); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_pref_change_registrar_.Add(prefs::kHideWebStoreIcon, callback); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Some tests don't have a local state. 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_APP_LIST) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (g_browser_process->local_state()) { 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state_pref_change_registrar_.Init(g_browser_process->local_state()); 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) local_state_pref_change_registrar_.Add(prefs::kShowAppLauncherPromo, 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback); 189b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) local_state_pref_change_registrar_.Add( 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) prefs::kAppLauncherHasBeenEnabled, callback); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NTPResourceCache::~NTPResourceCache() {} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NTPResourceCache::NewTabCacheNeedsRefresh() { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invalidate if the current value is different from the cached value. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_enabled = platform_util::IsSwipeTrackingFromScrollEventsEnabled(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_enabled != is_swipe_tracking_from_scroll_events_enabled_) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_swipe_tracking_from_scroll_events_enabled_ = is_enabled; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_show_apps_page = NewTabUI::ShouldShowApps(); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (should_show_apps_page != should_show_apps_page_) { 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_show_apps_page_ = should_show_apps_page; 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)NTPResourceCache::WindowType NTPResourceCache::GetWindowType( 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Profile* profile, content::RenderProcessHost* render_host) { 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (profile->IsGuestSession()) { 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return NTPResourceCache::GUEST; 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (render_host) { 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Sometimes the |profile| is the parent (non-incognito) version of the user 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // so we check the |render_host| if it is provided. 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (render_host->GetBrowserContext()->IsOffTheRecord()) 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return NTPResourceCache::INCOGNITO; 2233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (profile->IsOffTheRecord()) { 2243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return NTPResourceCache::INCOGNITO; 2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return NTPResourceCache::NORMAL; 2273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::RefCountedMemory* NTPResourceCache::GetNewTabHTML(WindowType win_type) { 230e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::UI); 2313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (win_type == GUEST) { 2323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!new_tab_guest_html_.get()) 2333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CreateNewTabGuestHTML(); 2343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return new_tab_guest_html_.get(); 2353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (win_type == INCOGNITO) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!new_tab_incognito_html_.get()) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateNewTabIncognitoHTML(); 2383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return new_tab_incognito_html_.get(); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Refresh the cached HTML if necessary. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: NewTabCacheNeedsRefresh() must be called every time the new tab 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTML is fetched, because it needs to initialize cached values. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (NewTabCacheNeedsRefresh() || !new_tab_html_.get()) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateNewTabHTML(); 2453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return new_tab_html_.get(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)base::RefCountedMemory* NTPResourceCache::GetNewTabCSS(WindowType win_type) { 250e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::UI); 2513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (win_type == GUEST) { 2523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!new_tab_guest_css_.get()) 2533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CreateNewTabGuestCSS(); 2543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return new_tab_guest_css_.get(); 2553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else if (win_type == INCOGNITO) { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!new_tab_incognito_css_.get()) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateNewTabIncognitoCSS(); 2583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return new_tab_incognito_css_.get(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!new_tab_css_.get()) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateNewTabCSS(); 2623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return new_tab_css_.get(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NTPResourceCache::Observe(int type, 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invalidate the cache. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chrome::NOTIFICATION_BROWSER_THEME_CHANGED == type || 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED == type) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_incognito_html_ = NULL; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_html_ = NULL; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_incognito_css_ = NULL; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_css_ = NULL; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NTPResourceCache::OnPreferenceChanged() { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A change occurred to one of the preferences we care about, so flush the 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cache. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_incognito_html_ = NULL; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_html_ = NULL; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_css_ = NULL; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NTPResourceCache::CreateNewTabIncognitoHTML() { 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue localized_strings; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings.SetString("title", 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE)); 2935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int new_tab_description_ids = IDS_NEW_TAB_OTR_DESCRIPTION; 2945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int new_tab_heading_ids = IDS_NEW_TAB_OTR_HEADING; 2955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int new_tab_link_ids = IDS_NEW_TAB_OTR_LEARN_MORE_LINK; 2965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int new_tab_warning_ids = IDS_NEW_TAB_OTR_MESSAGE_WARNING; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int new_tab_html_idr = IDR_INCOGNITO_TAB_HTML; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* new_tab_link = kLearnMoreIncognitoUrl; 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (profile_->IsGuestSession()) { 3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("guestTabDescription", 3025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(new_tab_description_ids)); 3035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("guestTabHeading", 3045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(new_tab_heading_ids)); 3055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else { 3065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("incognitoTabDescription", 3075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(new_tab_description_ids)); 3085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("incognitoTabHeading", 3095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(new_tab_heading_ids)); 3105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("incognitoTabWarning", 3115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(new_tab_warning_ids)); 3125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 3135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("learnMore", 3155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(new_tab_link_ids)); 316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) localized_strings.SetString("learnMoreLink", new_tab_link); 3175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool bookmark_bar_attached = 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->GetPrefs()->GetBoolean(bookmarks::prefs::kShowBookmarkBar); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings.SetBoolean("bookmarkbarattached", bookmark_bar_attached); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui::SetFontAndTextDirection(&localized_strings); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const base::StringPiece incognito_tab_html( 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetRawDataResource( 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_html_idr)); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string full_html = webui::GetI18nTemplateHtml( 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_tab_html, &localized_strings); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_incognito_html_ = base::RefCountedString::TakeString(&full_html); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void NTPResourceCache::CreateNewTabGuestHTML() { 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue localized_strings; 3363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) localized_strings.SetString("title", 3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE)); 338010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* guest_tab_link = kLearnMoreGuestSessionUrl; 339010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int guest_tab_ids = IDR_GUEST_TAB_HTML; 3405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int guest_tab_description_ids = IDS_NEW_TAB_GUEST_SESSION_DESCRIPTION; 3415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int guest_tab_heading_ids = IDS_NEW_TAB_GUEST_SESSION_HEADING; 3425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int guest_tab_link_ids = IDS_NEW_TAB_GUEST_SESSION_LEARN_MORE_LINK; 3435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 344010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_CHROMEOS) 345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) guest_tab_ids = IDR_GUEST_SESSION_TAB_HTML; 346010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) guest_tab_link = kLearnMoreGuestSessionUrl; 347010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 348010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) policy::BrowserPolicyConnectorChromeOS* connector = 349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 350010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string enterprise_domain = connector->GetEnterpriseDomain(); 351010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!enterprise_domain.empty()) { 353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Device is enterprise enrolled. 354010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) localized_strings.SetString("enterpriseInfoVisible", "true"); 355010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::string16 enterprise_info = l10n_util::GetStringFUTF16( 356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IDS_DEVICE_OWNED_BY_NOTICE, 357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::UTF8ToUTF16(enterprise_domain)); 358010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) localized_strings.SetString("enterpriseInfoMessage", enterprise_info); 359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) localized_strings.SetString("enterpriseLearnMore", 360010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_LEARN_MORE)); 361010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) localized_strings.SetString("enterpriseInfoHintLink", 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chrome::kLearnMoreEnterpriseURL); 363010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 364010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) localized_strings.SetString("enterpriseInfoVisible", "false"); 365010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 367010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 3685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("guestTabDescription", 3695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(guest_tab_description_ids)); 3705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("guestTabHeading", 3715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(guest_tab_heading_ids)); 3725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu localized_strings.SetString("learnMore", 3735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(guest_tab_link_ids)); 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) localized_strings.SetString("learnMoreLink", guest_tab_link); 3753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) webui::SetFontAndTextDirection(&localized_strings); 3773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static const base::StringPiece guest_tab_html( 379010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ResourceBundle::GetSharedInstance().GetRawDataResource(guest_tab_ids)); 3803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string full_html = webui::GetI18nTemplateHtml( 3823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) guest_tab_html, &localized_strings); 3833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new_tab_guest_html_ = base::RefCountedString::TakeString(&full_html); 3853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 3863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NTPResourceCache::CreateNewTabHTML() { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(estade): these strings should be defined in their relevant handlers 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (in GetLocalizedValues) and should have more legible names. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show the profile name in the title and most visited labels if the current 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile is not the default. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = profile_->GetPrefs(); 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue load_time_data; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetBoolean("bookmarkbarattached", 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs->GetBoolean(bookmarks::prefs::kShowBookmarkBar)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetBoolean("hasattribution", 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThemeServiceFactory::GetForProfile(profile_)->HasCustomImage( 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDR_THEME_NTP_ATTRIBUTION)); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) load_time_data.SetBoolean("showMostvisited", should_show_most_visited_page_); 400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch load_time_data.SetBoolean("showAppLauncherPromo", 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ShouldShowAppLauncherPromo()); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) load_time_data.SetBoolean("showRecentlyClosed", 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_show_recently_closed_menu_); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("title", 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE)); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("mostvisited", 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_MOST_VISITED)); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("suggestions", 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_SUGGESTIONS)); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("restoreThumbnailsShort", 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_RESTORE_THUMBNAILS_SHORT_LINK)); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("recentlyclosed", 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_RECENTLY_CLOSED)); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("webStoreTitle", 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE)); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("webStoreTitleShort", 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE_SHORT)); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("closedwindowsingle", 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_RECENTLY_CLOSED_WINDOW_SINGLE)); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("closedwindowmultiple", 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_RECENTLY_CLOSED_WINDOW_MULTIPLE)); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("attributionintro", 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_ATTRIBUTION_INTRO)); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("thumbnailremovednotification", 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_THUMBNAIL_REMOVED_NOTIFICATION)); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("undothumbnailremove", 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_UNDO_THUMBNAIL_REMOVE)); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("removethumbnailtooltip", 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_REMOVE_THUMBNAIL_TOOLTIP)); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("appuninstall", 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_EXTENSIONS_UNINSTALL)); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("appoptions", 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_OPTIONS)); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("appdetails", 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_DETAILS)); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("appcreateshortcut", 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_CREATE_SHORTCUT)); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("appDefaultPageName", 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_APP_DEFAULT_PAGE_NAME)); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("applaunchtypepinned", 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_PINNED)); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("applaunchtyperegular", 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_REGULAR)); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("applaunchtypewindow", 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_WINDOW)); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("applaunchtypefullscreen", 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_FULLSCREEN)); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("syncpromotext", 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL)); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("syncLinkText", 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_SYNC_ADVANCED_OPTIONS)); 452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch load_time_data.SetBoolean("shouldShowSyncLogin", 453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NTPLoginHandler::ShouldShow(profile_)); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("otherSessions", 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_OTHER_SESSIONS_LABEL)); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("otherSessionsEmpty", 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_OTHER_SESSIONS_EMPTY)); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("otherSessionsLearnMoreUrl", 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_OTHER_SESSIONS_LEARN_MORE_URL)); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("learnMore", 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_LEARN_MORE)); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("webStoreLink", 463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) google_util::AppendGoogleLocaleParam( 464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL(extension_urls::GetWebstoreLaunchURL()), 465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) g_browser_process->GetApplicationLocale()).spec()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("appInstallHintText", 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_INSTALL_HINT_LABEL)); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetBoolean("isDiscoveryInNTPEnabled", 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NewTabUI::IsDiscoveryInNTPEnabled()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("collapseSessionMenuItemText", 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_OTHER_SESSIONS_COLLAPSE_SESSION)); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("expandSessionMenuItemText", 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_OTHER_SESSIONS_EXPAND_SESSION)); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("restoreSessionMenuItemText", 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_OTHER_SESSIONS_OPEN_ALL)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("learn_more", 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_LEARN_MORE)); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("tile_grid_screenreader_accessible_description", 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_TILE_GRID_ACCESSIBLE_DESCRIPTION)); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("page_switcher_change_title", 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_PAGE_SWITCHER_CHANGE_TITLE)); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("page_switcher_same_title", 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_PAGE_SWITCHER_SAME_TITLE)); 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) load_time_data.SetString("appsPromoTitle", 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_PAGE_APPS_PROMO_TITLE)); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Mac OS X 10.7+, horizontal scrolling can be treated as a back or 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // forward gesture. Pass through a flag that indicates whether or not that 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // feature is enabled. 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetBoolean("isSwipeTrackingFromScrollEventsEnabled", 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_swipe_tracking_from_scroll_events_enabled_); 4912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) load_time_data.SetBoolean("showApps", should_show_apps_page_); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) load_time_data.SetBoolean("showWebStoreIcon", 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !prefs->GetBoolean(prefs::kHideWebStoreIcon)); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool streamlined_hosted_apps = 4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::util::IsStreamlinedHostedAppsEnabled(); 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) load_time_data.SetBoolean("enableStreamlinedHostedApps", 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) streamlined_hosted_apps); 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Use a different string for launching as a regular tab for streamlined 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // hosted apps. 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (streamlined_hosted_apps) { 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) load_time_data.SetString("applaunchtypetab", 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_APP_CONTEXT_MENU_OPEN_TAB)); 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("expandMenu", 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_NEW_TAB_CLOSE_MENU_EXPAND)); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NewTabPageHandler::GetLocalizedValues(profile_, &load_time_data); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NTPLoginHandler::GetLocalizedValues(profile_, &load_time_data); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui::SetFontAndTextDirection(&load_time_data); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Control fade and resize animations. 518d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) load_time_data.SetBoolean("anim", 519d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gfx::Animation::ShouldRenderRichAnimation()); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ThemeProvider* tp = ThemeServiceFactory::GetForProfile(profile_); 522424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int alignment = tp->GetDisplayProperty( 523424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ThemeProperties::NTP_BACKGROUND_ALIGNMENT); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("themegravity", 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (alignment & ThemeProperties::ALIGN_RIGHT) ? "right" : ""); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable the promo if this is the first run, otherwise set the promo string 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for display if there is a valid outstanding promo. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (first_run::IsChromeFirstRun()) { 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo::HandleClosed(NotificationPromo::NTP_NOTIFICATION_PROMO); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo notification_promo; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo.InitFromPrefs(NotificationPromo::NTP_NOTIFICATION_PROMO); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (notification_promo.CanShow()) { 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("notificationPromoText", 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_promo.promo_text()); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << "Notification promo:" << notification_promo.promo_text(); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotificationPromo bubble_promo; 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_promo.InitFromPrefs(NotificationPromo::NTP_BUBBLE_PROMO); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bubble_promo.CanShow()) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetString("bubblePromoText", 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_promo.promo_text()); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << "Bubble promo:" << bubble_promo.promo_text(); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determine whether to show the menu for accessing tabs on other devices. 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_other_sessions_menu = should_show_other_devices_menu_ && 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !CommandLine::ForCurrentProcess()->HasSwitch( 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kDisableNTPOtherSessionsMenu); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) load_time_data.SetBoolean("showOtherSessionsMenu", show_other_sessions_menu); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time_data.SetBoolean("isUserSignedIn", 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !prefs->GetString(prefs::kGoogleServicesUsername).empty()); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Load the new tab page appropriate for this build. 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPiece new_tab_html(ResourceBundle::GetSharedInstance(). 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRawDataResource(IDR_NEW_TAB_4_HTML)); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui::UseVersion2 version2; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string full_html = 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui::GetI18nTemplateHtml(new_tab_html, &load_time_data); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_html_ = base::RefCountedString::TakeString(&full_html); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NTPResourceCache::CreateNewTabIncognitoCSS() { 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ThemeProvider* tp = ThemeServiceFactory::GetForProfile(profile_); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(tp); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get our theme colors 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_background = 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_BACKGROUND); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate the replacements. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> subst; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cache-buster for background. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back( 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->GetString(prefs::kCurrentThemeID)); // $1 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Colors. 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_background)); // $2 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subst.push_back(GetNewTabBackgroundCSS(tp, false)); // $3 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subst.push_back(GetNewTabBackgroundCSS(tp, true)); // $4 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(GetNewTabBackgroundTilingCSS(tp)); // $5 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get our template. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const base::StringPiece new_tab_theme_css( 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetRawDataResource( 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDR_NEW_INCOGNITO_TAB_THEME_CSS)); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the string from our template and the replacements. 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string full_css = ReplaceStringPlaceholders( 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_theme_css, subst, NULL); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_incognito_css_ = base::RefCountedString::TakeString(&full_css); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void NTPResourceCache::CreateNewTabGuestCSS() { 6003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui::ThemeProvider* tp = ThemeServiceFactory::GetForProfile(profile_); 6013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(tp); 6023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Get our theme colors 6043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SkColor color_background = 6053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_BACKGROUND); 6063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Generate the replacements. 6083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<std::string> subst; 6093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Cache-buster for background. 6113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subst.push_back( 6123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) profile_->GetPrefs()->GetString(prefs::kCurrentThemeID)); // $1 6133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Colors. 6153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_background)); // $2 6163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subst.push_back(GetNewTabBackgroundCSS(tp, false)); // $3 6173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subst.push_back(GetNewTabBackgroundCSS(tp, true)); // $4 6183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subst.push_back(GetNewTabBackgroundTilingCSS(tp)); // $5 6193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Get our template. 6213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static const base::StringPiece new_tab_theme_css( 6223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetRawDataResource( 6233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) IDR_NEW_GUEST_TAB_THEME_CSS)); 6243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Create the string from our template and the replacements. 6263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string full_css = ReplaceStringPlaceholders( 6273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new_tab_theme_css, subst, NULL); 6283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new_tab_guest_css_ = base::RefCountedString::TakeString(&full_css); 6303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 6313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NTPResourceCache::CreateNewTabCSS() { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ThemeProvider* tp = ThemeServiceFactory::GetForProfile(profile_); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(tp); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get our theme colors 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_background = 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_BACKGROUND); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor color_text = GetThemeColor(tp, ThemeProperties::COLOR_NTP_TEXT); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor color_link = GetThemeColor(tp, ThemeProperties::COLOR_NTP_LINK); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_link_underline = 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_LINK_UNDERLINE); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section = 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_text = 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_TEXT); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_link = 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_LINK); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_link_underline = 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_LINK_UNDERLINE); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_header_text = 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_HEADER_TEXT); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_header_text_hover = 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_HEADER_TEXT_HOVER); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_header_rule = 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_HEADER_RULE); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_header_rule_light = 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_SECTION_HEADER_RULE_LIGHT); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_text_light = 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_TEXT_LIGHT); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_header = 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetThemeColor(tp, ThemeProperties::COLOR_NTP_HEADER); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate a lighter color for the header gradients. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color_utils::HSL header_lighter; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color_utils::SkColorToHSL(color_header, &header_lighter); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header_lighter.l += (1 - header_lighter.l) * 0.33; 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_header_gradient_light = 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color_utils::HSLToSkColor(header_lighter, SkColorGetA(color_header)); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate section border color from the header color. See 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkBarView::Paint for how we do this for the bookmark bar 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // borders. 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_section_border = 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorSetARGB(80, 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetR(color_header), 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetG(color_header), 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorGetB(color_header)); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate the replacements. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> subst; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cache-buster for background. 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back( 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->GetString(prefs::kCurrentThemeID)); // $1 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Colors. 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_background)); // $2 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subst.push_back(GetNewTabBackgroundCSS(tp, false)); // $3 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subst.push_back(GetNewTabBackgroundCSS(tp, true)); // $4 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(GetNewTabBackgroundTilingCSS(tp)); // $5 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_header)); // $6 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_header_gradient_light)); // $7 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_text)); // $8 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_link)); // $9 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section)); // $10 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section_border)); // $11 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section_text)); // $12 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section_link)); // $13 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_link_underline)); // $14 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section_link_underline)); // $15 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section_header_text)); // $16 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString( 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color_section_header_text_hover)); // $17 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_section_header_rule)); // $18 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString( 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color_section_header_rule_light)); // $19 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString( 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColorSetA(color_section_header_rule, 0))); // $20 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBAString(color_text_light)); // $21 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBComponents(color_section_border)); // $22 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subst.push_back(SkColorToRGBComponents(color_text)); // $23 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get our template. 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const base::StringPiece new_tab_theme_css( 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceBundle::GetSharedInstance().GetRawDataResource( 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_NEW_TAB_4_THEME_CSS)); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create the string from our template and the replacements. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string css_string; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) css_string = ReplaceStringPlaceholders(new_tab_theme_css, subst, NULL); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_tab_css_ = base::RefCountedString::TakeString(&css_string); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725