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)#ifndef CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RefCountedMemory;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace content {
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class RenderProcessHost;
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class keeps a cache of NTP resources (HTML and CSS) so we don't have to
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// regenerate them all the time.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NTPResourceCache : public content::NotificationObserver,
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                         public BrowserContextKeyedService {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  enum WindowType {
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    NORMAL,
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    INCOGNITO,
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    GUEST,
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  };
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit NTPResourceCache(Profile* profile);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~NTPResourceCache();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::RefCountedMemory* GetNewTabHTML(WindowType win_type);
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  base::RefCountedMemory* GetNewTabCSS(WindowType win_type);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void set_should_show_apps_page(bool should_show_apps_page) {
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    should_show_apps_page_ = should_show_apps_page;
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_should_show_most_visited_page(bool should_show_most_visited_page) {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_show_most_visited_page_ = should_show_most_visited_page;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_should_show_other_devices_menu(bool should_show_other_devices_menu) {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_show_other_devices_menu_ = should_show_other_devices_menu;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_should_show_recently_closed_menu(
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool should_show_recently_closed_menu) {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_show_recently_closed_menu_ = should_show_recently_closed_menu;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::NotificationObserver interface.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  static WindowType GetWindowType(
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      Profile* profile, content::RenderProcessHost* render_host);
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnPreferenceChanged();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabHTML();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper to determine if the resource cache should be invalidated.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is called on every page load, and can be used to check values that
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // don't generate a notification when changed (e.g., system preferences).
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool NewTabCacheNeedsRefresh();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_html_;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a message describing any newly-added sync types, or an empty
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // string if all types have already been acknowledged.
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 GetSyncTypeMessage();
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabIncognitoHTML();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabIncognitoCSS();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void CreateNewTabGuestHTML();
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void CreateNewTabGuestCSS();
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabCSS();
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_guest_html_;
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_guest_css_;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_incognito_html_;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_incognito_css_;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_css_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PrefChangeRegistrar profile_pref_change_registrar_;
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PrefChangeRegistrar local_state_pref_change_registrar_;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set based on platform_util::IsSwipeTrackingFromScrollEventsEnabled.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_swipe_tracking_from_scroll_events_enabled_;
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Set based on NewTabUI::ShouldShowApps.
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_apps_page_;
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The next three all default to true and can be manually set, e.g., by the
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // chrome://apps page.
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_most_visited_page_;
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_other_devices_menu_;
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_recently_closed_menu_;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NTPResourceCache);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_
116