Home | History | Annotate | Download | only in webui
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_WEBUI_NEW_TAB_UI_H_
      6 #define CHROME_BROWSER_UI_WEBUI_NEW_TAB_UI_H_
      7 #pragma once
      8 
      9 #include <string>
     10 
     11 #include "base/gtest_prod_util.h"
     12 #include "base/timer.h"
     13 #include "chrome/browser/sessions/tab_restore_service.h"
     14 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
     15 #include "content/browser/webui/web_ui.h"
     16 #include "content/common/notification_observer.h"
     17 #include "content/common/notification_registrar.h"
     18 
     19 class GURL;
     20 class MessageLoop;
     21 class PrefService;
     22 class Profile;
     23 
     24 // The TabContents used for the New Tab page.
     25 class NewTabUI : public WebUI,
     26                  public NotificationObserver {
     27  public:
     28   explicit NewTabUI(TabContents* manager);
     29   ~NewTabUI();
     30 
     31   // Override WebUI methods so we can hook up the paint timer to the render
     32   // view host.
     33   virtual void RenderViewCreated(RenderViewHost* render_view_host);
     34   virtual void RenderViewReused(RenderViewHost* render_view_host);
     35 
     36   static void RegisterUserPrefs(PrefService* prefs);
     37   static void MigrateUserPrefs(PrefService* prefs, int old_pref_version,
     38                                int new_pref_version);
     39 
     40   // Whether we should disable the first run notification based on the command
     41   // line switch.
     42   static bool FirstRunDisabled();
     43 
     44   // Adds "url", "title", and "direction" keys on incoming dictionary, setting
     45   // title as the url as a fallback on empty title.
     46   static void SetURLTitleAndDirection(DictionaryValue* dictionary,
     47                                       const string16& title,
     48                                       const GURL& gurl);
     49 
     50   // Converts a list of TabRestoreService entries to the JSON format required
     51   // by the NTP and adds them to the given list value.
     52   static void AddRecentlyClosedEntries(
     53       const TabRestoreService::Entries& entries,
     54       ListValue* entry_list_value);
     55 
     56   // The current preference version.
     57   static int current_pref_version() { return current_pref_version_; }
     58 
     59   class NewTabHTMLSource : public ChromeURLDataManager::DataSource {
     60    public:
     61     explicit NewTabHTMLSource(Profile* profile);
     62 
     63     // Called when the network layer has requested a resource underneath
     64     // the path we registered.
     65     virtual void StartDataRequest(const std::string& path,
     66                                   bool is_incognito,
     67                                   int request_id);
     68 
     69     virtual std::string GetMimeType(const std::string&) const;
     70 
     71     virtual bool ShouldReplaceExistingSource() const;
     72 
     73     // Setters and getters for first_run.
     74     static void set_first_run(bool first_run) { first_run_ = first_run; }
     75     static bool first_run() { return first_run_; }
     76 
     77    private:
     78     virtual ~NewTabHTMLSource() {}
     79 
     80     // Whether this is the first run.
     81     static bool first_run_;
     82 
     83     // Pointer back to the original profile.
     84     Profile* profile_;
     85 
     86     DISALLOW_COPY_AND_ASSIGN(NewTabHTMLSource);
     87   };
     88 
     89  private:
     90   FRIEND_TEST_ALL_PREFIXES(NewTabUITest, UpdateUserPrefsVersion);
     91 
     92   virtual void Observe(NotificationType type,
     93                        const NotificationSource& source,
     94                        const NotificationDetails& details);
     95 
     96   // Reset the CSS caches.
     97   void InitializeCSSCaches();
     98 
     99   void StartTimingPaint(RenderViewHost* render_view_host);
    100   void PaintTimeout();
    101 
    102   // Updates the user prefs version and calls |MigrateUserPrefs| if needed.
    103   // Returns true if the version was updated.
    104   static bool UpdateUserPrefsVersion(PrefService* prefs);
    105 
    106   NotificationRegistrar registrar_;
    107 
    108   // The time when we started benchmarking.
    109   base::TimeTicks start_;
    110   // The last time we got a paint notification.
    111   base::TimeTicks last_paint_;
    112   // Scoping so we can be sure our timeouts don't outlive us.
    113   base::OneShotTimer<NewTabUI> timer_;
    114   // The preference version. This used for migrating prefs of the NTP.
    115   static const int current_pref_version_ = 3;
    116 
    117   DISALLOW_COPY_AND_ASSIGN(NewTabUI);
    118 };
    119 
    120 #endif  // CHROME_BROWSER_UI_WEBUI_NEW_TAB_UI_H_
    121