1 // Copyright (c) 2012 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_EXTENSIONS_WINDOW_CONTROLLER_H_ 6 #define CHROME_BROWSER_EXTENSIONS_WINDOW_CONTROLLER_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 13 class Browser; // TODO(stevenjb) eliminate this dependency. 14 class GURL; 15 class Profile; 16 class SessionID; 17 18 namespace base { 19 class DictionaryValue; 20 } 21 22 namespace gfx { 23 class Rect; 24 } 25 26 namespace ui { 27 class BaseWindow; 28 } 29 30 namespace extensions { 31 class Extension; 32 33 // This API needs to be implemented by any window that might be accessed 34 // through chrome.windows or chrome.tabs (e.g. browser windows and panels). 35 // Subclasses must add/remove themselves from the WindowControllerList 36 // upon construction/destruction. 37 class WindowController { 38 public: 39 enum Reason { 40 REASON_NONE, 41 REASON_NOT_EDITABLE, 42 }; 43 44 WindowController(ui::BaseWindow* window, Profile* profile); 45 virtual ~WindowController(); 46 window()47 ui::BaseWindow* window() const { return window_; } 48 profile()49 Profile* profile() const { return profile_; } 50 51 // Return an id uniquely identifying the window. 52 virtual int GetWindowId() const = 0; 53 54 // Return the type name for the window. 55 virtual std::string GetWindowTypeText() const = 0; 56 57 // Populates a dictionary for the Window object. Override this to set 58 // implementation specific properties (call the base implementation first to 59 // set common properties). 60 virtual base::DictionaryValue* CreateWindowValue() const; 61 62 // Populates a dictionary for the Window object, including a list of tabs. 63 virtual base::DictionaryValue* CreateWindowValueWithTabs( 64 const extensions::Extension* extension) const = 0; 65 66 virtual base::DictionaryValue* CreateTabValue( 67 const extensions::Extension* extension, int tab_index) const = 0; 68 69 // Returns false if the window is in a state where closing the window is not 70 // permitted and sets |reason| if not NULL. 71 virtual bool CanClose(Reason* reason) const = 0; 72 73 // Set the window's fullscreen state. |extension_url| provides the url 74 // associated with the extension (used by FullscreenController). 75 virtual void SetFullscreenMode(bool is_fullscreen, 76 const GURL& extension_url) const = 0; 77 78 // Returns a Browser if available. Defaults to returning NULL. 79 // TODO(stevenjb): Temporary workaround. Eliminate this. 80 virtual Browser* GetBrowser() const; 81 82 // Extension/window visibility and ownership is window-specific, subclasses 83 // need to define this behavior. 84 virtual bool IsVisibleToExtension(const Extension* extension) const = 0; 85 86 private: 87 ui::BaseWindow* window_; 88 Profile* profile_; 89 90 DISALLOW_COPY_AND_ASSIGN(WindowController); 91 }; 92 93 } // namespace extensions 94 95 #endif // CHROME_BROWSER_EXTENSIONS_WINDOW_CONTROLLER_H_ 96