ntp_resource_cache.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_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)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class keeps a cache of NTP resources (HTML and CSS) so we don't have to
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// regenerate them all the time.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NTPResourceCache : public content::NotificationObserver,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         public ProfileKeyedService {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit NTPResourceCache(Profile* profile);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~NTPResourceCache();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RefCountedMemory* GetNewTabHTML(bool is_incognito);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RefCountedMemory* GetNewTabCSS(bool is_incognito);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_should_show_most_visited_page(bool should_show_most_visited_page) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_show_most_visited_page_ = should_show_most_visited_page;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_should_show_other_devices_menu(bool should_show_other_devices_menu) {
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_show_other_devices_menu_ = should_show_other_devices_menu;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_should_show_recently_closed_menu(
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool should_show_recently_closed_menu) {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    should_show_recently_closed_menu_ = should_show_recently_closed_menu;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::NotificationObserver interface.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnPreferenceChanged();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabHTML();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper to determine if the resource cache should be invalidated.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is called on every page load, and can be used to check values that
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // don't generate a notification when changed (e.g., system preferences).
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool NewTabCacheNeedsRefresh();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile_;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_html_;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a message describing any newly-added sync types, or an empty
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // string if all types have already been acknowledged.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 GetSyncTypeMessage();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabIncognitoHTML();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabIncognitoCSS();
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateNewTabCSS();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_incognito_html_;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_incognito_css_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<base::RefCountedMemory> new_tab_css_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefChangeRegistrar pref_change_registrar_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set based on platform_util::IsSwipeTrackingFromScrollEventsEnabled.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_swipe_tracking_from_scroll_events_enabled_;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set based on extensions::IsAppLauncherEnabled.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_apps_page_;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The next three all default to true and can be manually set, e.g., by the
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // chrome://apps page.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_most_visited_page_;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_other_devices_menu_;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_show_recently_closed_menu_;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NTPResourceCache);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_
95