• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
current_pref_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.
set_first_run(bool first_run)74     static void set_first_run(bool first_run) { first_run_ = first_run; }
first_run()75     static bool first_run() { return first_run_; }
76 
77    private:
~NewTabHTMLSource()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