// Copyright (c) 2012 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_COCOA_BROWSER_WINDOW_COCOA_H_ #define CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_COCOA_H_ #include "base/mac/scoped_nsobject.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/extensions/extension_keybinding_registry.h" #include "chrome/browser/signin/signin_header_helper.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/search/search_model_observer.h" #include "components/bookmarks/browser/bookmark_model.h" #include "ui/base/ui_base_types.h" class Browser; @class BrowserWindowController; @class FindBarCocoaController; @class NSEvent; @class NSMenu; @class NSWindow; namespace extensions { class ActiveTabPermissionGranter; class Command; class Extension; } // An implementation of BrowserWindow for Cocoa. Bridges between C++ and // the Cocoa NSWindow. Cross-platform code will interact with this object when // it needs to manipulate the window. class BrowserWindowCocoa : public BrowserWindow, public extensions::ExtensionKeybindingRegistry::Delegate, public SearchModelObserver { public: BrowserWindowCocoa(Browser* browser, BrowserWindowController* controller); ~BrowserWindowCocoa() override; // Overridden from BrowserWindow void Show() override; void ShowInactive() override; void Hide() override; void SetBounds(const gfx::Rect& bounds) override; void Close() override; void Activate() override; void Deactivate() override; bool IsActive() const override; void FlashFrame(bool flash) override; bool IsAlwaysOnTop() const override; void SetAlwaysOnTop(bool always_on_top) override; gfx::NativeWindow GetNativeWindow() const override; BrowserWindowTesting* GetBrowserWindowTesting() override; StatusBubble* GetStatusBubble() override; void UpdateTitleBar() override; void BookmarkBarStateChanged( BookmarkBar::AnimateChangeType change_type) override; void UpdateDevTools() override; void UpdateLoadingAnimations(bool should_animate) override; void SetStarredState(bool is_starred) override; void SetTranslateIconToggled(bool is_lit) override; void OnActiveTabChanged(content::WebContents* old_contents, content::WebContents* new_contents, int index, int reason) override; void ZoomChangedForActiveTab(bool can_show_bubble) override; gfx::Rect GetRestoredBounds() const override; ui::WindowShowState GetRestoredState() const override; gfx::Rect GetBounds() const override; bool IsMaximized() const override; bool IsMinimized() const override; void Maximize() override; void Minimize() override; void Restore() override; void EnterFullscreen(const GURL& url, FullscreenExitBubbleType type) override; void ExitFullscreen() override; void UpdateFullscreenExitBubbleContent( const GURL& url, FullscreenExitBubbleType bubble_type) override; bool ShouldHideUIForFullscreen() const override; bool IsFullscreen() const override; bool IsFullscreenBubbleVisible() const override; LocationBar* GetLocationBar() const override; void SetFocusToLocationBar(bool select_all) override; void UpdateReloadStopState(bool is_loading, bool force) override; void UpdateToolbar(content::WebContents* contents) override; void FocusToolbar() override; void FocusAppMenu() override; void FocusBookmarksToolbar() override; void FocusInfobars() override; void RotatePaneFocus(bool forwards) override; bool IsBookmarkBarVisible() const override; bool IsBookmarkBarAnimating() const override; bool IsTabStripEditable() const override; bool IsToolbarVisible() const override; gfx::Rect GetRootWindowResizerRect() const override; void ConfirmAddSearchProvider(TemplateURL* template_url, Profile* profile) override; void ShowUpdateChromeDialog() override; void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) override; void ShowBookmarkAppBubble(const WebApplicationInfo& web_app_info, const std::string& extension_id) override; void ShowTranslateBubble(content::WebContents* contents, translate::TranslateStep step, translate::TranslateErrors::Type error_type, bool is_user_gesture) override; #if defined(ENABLE_ONE_CLICK_SIGNIN) void ShowOneClickSigninBubble( OneClickSigninBubbleType type, const base::string16& email, const base::string16& error_message, const StartSyncCallback& start_sync_callback) override; #endif bool IsDownloadShelfVisible() const override; DownloadShelf* GetDownloadShelf() override; void ConfirmBrowserCloseWithPendingDownloads( int download_count, Browser::DownloadClosePreventionType dialog_type, bool app_modal, const base::Callback& callback) override; void UserChangedTheme() override; int GetExtraRenderViewHeight() const override; void WebContentsFocused(content::WebContents* contents) override; void ShowWebsiteSettings(Profile* profile, content::WebContents* web_contents, const GURL& url, const content::SSLStatus& ssl) override; void ShowAppMenu() override; bool PreHandleKeyboardEvent(const content::NativeWebKeyboardEvent& event, bool* is_keyboard_shortcut) override; void HandleKeyboardEvent( const content::NativeWebKeyboardEvent& event) override; void Cut() override; void Copy() override; void Paste() override; void EnterFullscreenWithChrome() override; void EnterFullscreenWithoutChrome() override; bool IsFullscreenWithChrome() override; bool IsFullscreenWithoutChrome() override; WindowOpenDisposition GetDispositionForPopupBounds( const gfx::Rect& bounds) override; FindBar* CreateFindBar() override; web_modal::WebContentsModalDialogHost* GetWebContentsModalDialogHost() override; void ShowAvatarBubble(content::WebContents* web_contents, const gfx::Rect& rect) override; void ShowAvatarBubbleFromAvatarButton( AvatarBubbleMode mode, const signin::ManageAccountsParams& manage_accounts_params) override; int GetRenderViewHeightInsetWithDetachedBookmarkBar() override; void ExecuteExtensionCommand(const extensions::Extension* extension, const extensions::Command& command) override; // Overridden from ExtensionKeybindingRegistry::Delegate: extensions::ActiveTabPermissionGranter* GetActiveTabPermissionGranter() override; // Overridden from SearchModelObserver: void ModelChanged(const SearchModel::State& old_state, const SearchModel::State& new_state) override; // Adds the given FindBar cocoa controller to this browser window. void AddFindBar(FindBarCocoaController* find_bar_cocoa_controller); // Returns the cocoa-world BrowserWindowController BrowserWindowController* cocoa_controller() { return controller_; } protected: void DestroyBrowser() override; private: NSWindow* window() const; // Accessor for the (current) |NSWindow|. Browser* browser_; // weak, owned by controller BrowserWindowController* controller_; // weak, owns us base::scoped_nsobject pending_window_title_; ui::WindowShowState initial_show_state_; NSInteger attention_request_id_; // identifier from requestUserAttention }; #endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_COCOA_H_