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_OPTIONS_STARTUP_PAGES_HANDLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_OPTIONS_STARTUP_PAGES_HANDLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller_delegate.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/options_ui.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/table_model_observer.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutocompleteController;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CustomHomePagesTableModel;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TemplateURLService;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chrome browser options page UI handler.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StartupPagesHandler : public OptionsPageUIHandler,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            public AutocompleteControllerDelegate,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            public ui::TableModelObserver {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupPagesHandler();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~StartupPagesHandler();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OptionsPageUIHandler implementation.
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void GetLocalizedValues(
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::DictionaryValue* localized_strings) OVERRIDE;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitializeHandler() OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitializePage() OVERRIDE;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RegisterMessages() OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AutocompleteControllerDelegate implementation.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnResultChanged(bool default_match_changed) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ui::TableModelObserver implementation.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnModelChanged() OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnItemsChanged(int start, int length) OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnItemsAdded(int start, int length) OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnItemsRemoved(int start, int length) OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Saves the changes that have been made. Called from WebUI.
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void CommitChanges(const base::ListValue* args);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cancels the changes that have been made. Called from WebUI.
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void CancelChanges(const base::ListValue* args);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removes the startup page at the given indexes. Called from WebUI.
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void RemoveStartupPages(const base::ListValue* args);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds a startup page with the given URL after the given index.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from WebUI.
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddStartupPage(const base::ListValue* args);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Changes the startup page at the given index to the given URL.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from WebUI.
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void EditStartupPage(const base::ListValue* args);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the startup page set to the current pages. Called from WebUI.
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetStartupPagesToCurrentPages(const base::ListValue* args);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Writes the current set of startup pages to prefs. Called from WebUI.
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DragDropStartupPage(const base::ListValue* args);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets autocomplete suggestions asychronously for the given string.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from WebUI.
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void RequestAutocompleteSuggestions(const base::ListValue* args);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Loads the current set of custom startup pages and reports it to the WebUI.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateStartupPages();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Writes the current set of startup pages to prefs.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SaveStartupPagesPref();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<AutocompleteController> autocomplete_controller_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used to observe updates to the preference of the list of URLs to load
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on startup, which can be updated via sync.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefChangeRegistrar pref_change_registrar_;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(stuartmorgan): Once there are no other clients of
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CustomHomePagesTableModel, consider changing it to something more like
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TemplateURLService.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<CustomHomePagesTableModel> startup_custom_pages_table_model_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(StartupPagesHandler);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace options
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_STARTUP_PAGES_HANDLER_H_
98