Home | History | Annotate | Download | only in ui
      1 // Copyright (c) 2014 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_SETTINGS_WINDOW_MANAGER_H_
      6 #define CHROME_BROWSER_UI_SETTINGS_WINDOW_MANAGER_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/memory/singleton.h"
     12 #include "base/observer_list.h"
     13 #include "components/sessions/session_id.h"
     14 
     15 class Browser;
     16 class GURL;
     17 class Profile;
     18 
     19 namespace chrome {
     20 
     21 class SettingsWindowManagerObserver;
     22 
     23 // Class for managing settings windows when --enable-settings-window is enabled.
     24 // TODO(stevenjb): Remove flag comment if enabled by default.
     25 
     26 class SettingsWindowManager {
     27  public:
     28   static SettingsWindowManager* GetInstance();
     29 
     30   void AddObserver(SettingsWindowManagerObserver* observer);
     31   void RemoveObserver(SettingsWindowManagerObserver* observer);
     32 
     33   // Shows a chrome:// page (e.g. Settings, About) in an an existing system
     34   // Browser window for |profile| or creates a new one.
     35   void ShowChromePageForProfile(Profile* profile, const GURL& gurl);
     36 
     37   // If a Browser settings window for |profile| has already been created,
     38   // returns it, otherwise returns NULL.
     39   Browser* FindBrowserForProfile(Profile* profile);
     40 
     41   // Returns true if |browser| is a settings window.
     42   bool IsSettingsBrowser(Browser* browser) const;
     43 
     44  private:
     45   friend struct DefaultSingletonTraits<SettingsWindowManager>;
     46   typedef std::map<Profile*, SessionID::id_type> ProfileSessionMap;
     47 
     48   SettingsWindowManager();
     49   ~SettingsWindowManager();
     50 
     51   ObserverList<SettingsWindowManagerObserver> observers_;
     52   ProfileSessionMap settings_session_map_;
     53 
     54   DISALLOW_COPY_AND_ASSIGN(SettingsWindowManager);
     55 };
     56 
     57 }  // namespace chrome
     58 
     59 #endif  // CHROME_BROWSER_UI_SETTINGS_WINDOW_MANAGER_H_
     60