| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_WEBUI_SHOWN_SECTIONS_HANDLER_H_ |
| #define CHROME_BROWSER_UI_WEBUI_SHOWN_SECTIONS_HANDLER_H_ |
| #pragma once |
| |
| #include "chrome/browser/prefs/pref_change_registrar.h" |
| #include "content/browser/webui/web_ui.h" |
| #include "content/common/notification_observer.h" |
| |
| class Extension; |
| class Value; |
| class PrefService; |
| |
| // Use for the shown sections bitmask. |
| // Currently, only the THUMB and APPS sections can be toggled by the user. Other |
| // sections are shown automatically if they have data, and hidden otherwise. |
| enum Section { |
| // If one of these is set, the corresponding section shows large thumbnails, |
| // else it shows only a small overview list. |
| THUMB = 1 << 0, |
| APPS = 1 << 6, |
| |
| // We use the low 16 bits for sections, the high 16 bits for menu mode. |
| ALL_SECTIONS_MASK = 0x0000FFFF, |
| |
| // If one of these is set, then the corresponding section is shown in a menu |
| // at the bottom of the NTP and no data is directly visible on the NTP. |
| MENU_THUMB = 1 << (0 + 16), |
| MENU_RECENT = 1 << (2 + 16), |
| MENU_APPS = 1 << (6 + 16), |
| }; |
| |
| class ShownSectionsHandler : public WebUIMessageHandler, |
| public NotificationObserver { |
| public: |
| explicit ShownSectionsHandler(PrefService* pref_service); |
| virtual ~ShownSectionsHandler() {} |
| |
| // Helper to get the current shown sections. |
| static int GetShownSections(PrefService* pref_service); |
| |
| // Expands |section|, collapsing any previously expanded section. This is the |
| // same thing that happens if a user clicks on |section|. |
| static void SetShownSection(PrefService* prefs, Section section); |
| |
| // WebUIMessageHandler implementation. |
| virtual void RegisterMessages(); |
| |
| // NotificationObserver implementation. |
| virtual void Observe(NotificationType type, |
| const NotificationSource& source, |
| const NotificationDetails& details); |
| |
| // Callback for "getShownSections" message. |
| void HandleGetShownSections(const ListValue* args); |
| |
| // Callback for "setShownSections" message. |
| void HandleSetShownSections(const ListValue* args); |
| |
| static void RegisterUserPrefs(PrefService* pref_service); |
| |
| static void MigrateUserPrefs(PrefService* pref_service, |
| int old_pref_version, |
| int new_pref_version); |
| |
| static void OnExtensionInstalled(PrefService* prefs, |
| const Extension* extension); |
| |
| private: |
| PrefService* pref_service_; |
| PrefChangeRegistrar pref_registrar_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ShownSectionsHandler); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_WEBUI_SHOWN_SECTIONS_HANDLER_H_ |